Двоит текст VK API(python)
Приветствую дорогие читатели. Хотел сделать упоминание всех участников беседы, всё сделал, но осталась проблема, троит текст при уведомлении.
Код:
def get_members():
members = vk11.method("messages.getConversationMembers",
{"peer_id": 2000000003})
members1 = json.loads(json.dumps(members))['items']
names = json.loads(json.dumps(members))['profiles']
members_ids = [member['member_id'] for member in members1 if
member['member_id'] > 0]
members_names = [name['first_name'] for name in names]
print(members_names)
message = 'Вы были созваны для привлечения внимания!'
for name in members_names:
for member_id in members_ids:
message += f'[id{member_id}|{name}]'
vk11.method("messages.send",
{"peer_id": 2000000003,
"message": message,
"random_id": random.randint(0, 2048)})
Вот что получается:
Хотелось бы, что бы упоминание проходило по типу: Данила, Сергей. (с выделением профиля при наведении на ссылку)
Спасибо.
Ответы (2 шт):
Автор решения: Евгений
→ Ссылка
Попробуйте заменить этот фрагмент кода
for name in members_names:
for member_id in members_ids:
message += f'[id{member_id}|{name}]
Вот этим фрагментом
for i in range(len(members_names)):
message += f'[id{members_ids[i]}|{members_names[i]}]'
Суть проблемы в том, что вы для каждого имени перебираете все ID
Т.е. если у вас будет 3 имени, оно будет выводить каждое 3 раза. Будет 4 имени - каждое выведет 4 раза
Автор решения: n1tr0xs
→ Ссылка
Попробуй с этим кодом:
def get_members():
members = vk11.method("messages.getConversationMembers",
{"peer_id": 2000000003})
members1 = json.loads(json.dumps(members))['items']
names = json.loads(json.dumps(members))['profiles']
members_ids = [member['member_id'] for member in members1 if
member['member_id'] > 0]
members_names = [name['first_name'] for name in names]
print(members_names)
message = 'Вы были созваны для привлечения внимания!'
for n, name in enumerate(members_names):
message += f'[id{members_ids[n]}|{name}], '
vk11.method("messages.send",
{"peer_id": 2000000003,
"message": message,
"random_id": random.randint(0, 2048)})

