Задать вопрос
@Andrew_Kartoshka

Vk Api. Как заставить бота работать в двух (и более) беседах одновременно?

Бот не хочет работать в двух (и более) беседах одновременно. Когда его исключаешь из первой он начинает работать во второй. Я так понял проблема в бесконечном цикле while True, код просто не выполняется после него. Как мне его по умному и во время остановить? По идее цикл спама и должен быть бесконечным.

def write_msg(chat_id, random_id, message):
    vk.method('messages.send', {'chat_id': chat_id, "random_id" : random_id, "message" : message})

def write_stick_msg(chat_id, random_id, sticker_id):
    vk.method('messages.send', {'chat_id': chat_id, "random_id" : random_id, "sticker_id" : sticker_id})

while True:
    try:
        for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:
                print("Ok")
                event_text = event.object.text.lower()
                if event_text == "[club190004487|церковь картошки], помощь":
                    write_msg(event.chat_id, event.object.random_id, "Вы вызвали помощь, доступные команды:\n1. Служба\n2. Смайлики\n3. Стикеры\n4...в разработке")
                elif event_text == "[club190004487|церковь картошки], служба":
                    write_msg(event.chat_id, event.object.random_id, "Атеисту *** полбу! КАРТОШКИ СОБИРАЕМСЯ!!!\n*спам машина запускается*")
                    write_msg(event.chat_id, event.object.random_id, "3")
                    write_msg(event.chat_id, event.object.random_id, "2")
                    write_msg(event.chat_id, event.object.random_id, "1")
                    while True:
                        write_msg(event.chat_id, event.object.random_id, spam_molitva)
                        write_msg(event.chat_id, event.object.random_id, spam_song)
                        write_msg(event.chat_id, event.object.random_id, spam_molitva)
                        write_msg(event.chat_id, event.object.random_id, "Картошка БОГ")
                        write_msg(event.chat_id, event.object.random_id, "Картошка БОГ")
                        write_msg(event.chat_id, event.object.random_id, "Картошка БОГ")
                elif event_text == "[club190004487|церковь картошки], смайлики":
                    write_msg(event.chat_id, event.object.random_id, """Атеисту *** полбу! КАРТОШКИ СОБИРАЕМСЯ!!!\n*щас будет *** смайликов*""")
                    write_msg(event.chat_id, event.object.random_id, "3")
                    write_msg(event.chat_id, event.object.random_id, "2")
                    write_msg(event.chat_id, event.object.random_id, "1")
                    while True:
                        write_msg(event.chat_id, event.object.random_id, spam_emoji)
                elif event_text == "[club190004487|церковь картошки], стикеры": 
                    write_msg(event.chat_id, event.object.random_id, """Атеисту *** полбу! КАРТОШКИ СОБИРАЕМСЯ!!!\n*щас будет *** стикеров*""")
                    write_msg(event.chat_id, event.object.random_id, "3")
                    write_msg(event.chat_id, event.object.random_id, "2")
                    write_msg(event.chat_id, event.object.random_id, "1")
                    while True:
                        write_stick_msg(event.chat_id, event.object.random_id, str(random.randint(7674, 7721)))
    except Exception as read_timeout:
        continue
    except Exception as permission_denied:
        break
  • Вопрос задан
  • 382 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@anerev
Я думаю можно вывести часть кода с флудом в отдельную функцию которая будет принимать чат ID, а в самом "боте" эту функцию в цикле for из списка в котором будут чат id бесед в которых включен флуд. Что касается выключения то можно в цикл while добавить longpoll запрос ВК, который просто будет проверять не пришла ли команда выхода.
Ответ написан
Комментировать
@che_aa
Обрабатывать ивент 'new_message' и вытягивать из ответа вк сервера нужные данные
event = vk_otvet['event']
message = vk_otvet['message']
if event == 'new_message':
    if message == '1':
      vk.method = send.message
...

И так добавлять нужные сообщения, и обрабатывать уже их
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы