私はBotLongPoolAPIでVkontakteのボットを作成します。コードを1つのステップではなくいくつかのステップで実行する必要がある場合、問題に直面しました

2019-12-30 python-3.x long-polling vk

たとえば、ある種のゲーム。ロジックはこれでした:

def write_msg_chat(chat_id, message):
    return vk.method('messages.send', {'chat_id': chat_id, 'message': message, 'random_id': 0})

def get_id(mes):
    if mes.startswith("[club") == True:
        ms = mess.split("|")[0]
        ms = ms.split("club")[1]
    elif mes.startswith("[id") == True:
        ms = mess.split("|")[0]
        ms = ms.split("id")[1]
    else:
        ms = mess
    return ms

vk = vk_api.VkApi(token=token)
group = '123456789'
wait = 25
longpoll = VkBotLongPoll(vk, group, wait)
for event in longpoll.listen():
    peer_id = event.object.peer_id
    chat_id = peer_id - 2000000000
    user = event.object.from_id
    mess = event.object.text.lower()
    if event.type == VkBotEventType.MESSAGE_NEW:
        #here the logic of the response to various messages
        if mess.startswith("duel") == True:
            arg = mess.split(" ")
            if arg[1] == "start":
                user2 = get_id(arg[2])
                write_msg_chat(chat_id,"The duel began between [id" + str(user) + "|" + get_name(user, "ins") + "] and [id" + user2 + "|" + get_name(user2, "ins") + "]\n"
                                                   "Goes the one who started\waiting for the request...")
                                    for event in longpoll.listen():
                                        #here is the response to any command of the type "shot"

その後、この時点で他のコマンドを待っている間は機能しないため、このアプローチはあまり良くないことに気付きました。 どのように書くことができるか教えてください。コマンドへの反応が保持されるように。

Answers

Related