Используя одну и ту же команду дважды, но получая другой ответ, если пользователь находится в списке
В настоящее время я создаю бота для дергаться в Python. Если пользователь вводит !start
Я хочу выход Tracking time
, а если тот же пользователь снова набирает start
Я хочу выход Already tracking time
, Я попробовал это:
people = []
if "!start" in message:
sendMessage(s, "Now recording your time in chat.")
print(user.title() + " is now tracking time.")
people.append(user)
print(", ".join(people))
if user in people and "start" in message:
sendMessage(s, "Worked")
Текущий вывод, который я получаю, когда набираю "! Start" в чате: Tracking time.
~ новая строка ~ Already tracking time.
2 ответа
Ваша проблема в том, что вы не проверяете, user
уже отслеживается до конца вашего дела, после того как он уже отправил сообщение "Теперь записываем ваше время в чате". Вы должны выполнить эту проверку раньше. Что-то в этом роде может работать для вас:
people = []
if "!start" in message:
if user in people:
sendMessage(s, "Already tracking time")
else:
sendMessage(s, "Now recording your time in chat.")
print(user.title() + " is now tracking time.")
people.append(user)
print(", ".join(people))
Разработав ботов в Python некоторое время назад (с плохой практикой кодирования), я предполагаю, что это if
Блок является одним из многих в большом handle_message
функция. Если это так, вы, скорее всего, хотите переехать people = []
из этой функции, поэтому он не будет повторно инициализирован для каждого полученного сообщения.
Для демонстрации этого решения используется фиктивная реализация sendMessage
:
def sendMessage(message):
print('Bot responds: {}'.format(message))
people = []
def handle_message(user, message):
print('{} says: {}'.format(user, message))
if "!start" in message:
if user in people:
sendMessage("Already tracking time")
else:
sendMessage("Now recording your time in chat.")
print(user.title() + " is now tracking time.")
people.append(user)
print(", ".join(people))
if __name__ == '__main__':
for _ in range(2):
handle_message("John", "!start")
Выход
John says: !start
Bot responds: Now recording your time in chat.
John is now tracking time.
John
John says: !start
Bot responds: Already tracking time
#people = []
people = {}
if "!start" in message:
sendMessage(s, "Now recording your time in chat.")
print(user.title() + " is now tracking time.")
people[user] = ['Already Tracking Time']
print(", ".join(people))
if user in people and "start" in message:
sendMessage(people[user][0], "Worked") # In case you want to send a different message for different command then you just have to append to the user in this dictionary and reference the correct subscript in the list.
Надеюсь, что это поможет, иначе, пожалуйста, предоставьте больше информации по этому вопросу и полный код.