Неправильная работа кода
Пишу бота для ВК Сообщества на Python.
Написал:
if 'хорошо' in msg_casefold or 'отлично' in msg_casefold or 'супер' in msg_casefold or 'офигено' in msg_casefold or 'офигенно' in msg_casefold or 'афигено' in msg_casefold or 'ах#ено' in msg_casefold or 'ах#енно' in msg_casefold or 'за#бись' in msg_casefold or 'за#бок' in msg_casefold or 'класс' in msg_casefold or 'клас' or 'топ' in msg_casefold:
answered = True
maybe_answer = ['Отлично, когда всё супер!', 'Вот и классненько', 'Супер!', 'Вот и хорошо!']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
Поясню:
answered = True нужно для того, чтобы Бот мог определить: будет ли получен ответ на сообщение или нет. Для этого, в тот момент, как сообщество получит новое сообщение переменная answered = False.
В конце, если сообщение не было равно чему-то из доступного (т.е. answered = False), то он выводит реакцию на неизвестную команду.
sender(id, text) - функция, которую я уже прописал в самом начале кода, чтобы тратить меньше времени на код для вывода текста.
Теперь же, после написания виновной части кода, то теперь всегда выводится текст этого параметра, не смотря на сообщение, даже если в сообщении не было нужного текста.
Что делать?
Больше кода:
try:
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
answered = False
if event.to_me:
if event.from_user and not event.from_chat:
v=0
if re.search(r'\bку\b', msg_lower):
v=1
if 'прив' in msg_lower or 'здравст' in msg_lower or 'здраст' in msg_lower or 'здаров' in msg_lower or 'здоров' in msg_lower or v==1:
v=0
answered = True
maybe_answer = ['Привет, '+nickname+'!', 'Здравствуйте, '+nickname+'!', 'Привет! Как дела, '+nickname+'?']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
if 'как' in msg_lower and 'дела' in msg_lower:
answered = True
maybe_answer = ['У нас всё путём, по-летнему :D', 'У нас всё отлично! А у Вас?', 'У нас отлично, а у Вас, '+nickname+'?']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
answered = False
if 'хорошо' in msg_lower or 'отлично' in msg_lower or 'супер' in msg_lower or 'офигено' in msg_lower or 'офигенно' in msg_lower or 'афигено' in msg_lower or 'ах#ено' in msg_lower or 'ах#енно' in msg_lower or 'за#бись' in msg_lower or 'за#бок' in msg_lower or 'класс' in msg_lower or 'клас' or 'топ' in msg_lower:
answered = True
maybe_answer = ['Отлично, когда всё супер!', 'Вот и классненько', 'Супер!', 'Вот и хорошо!']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
if 'спасибо' in msg_lower or 'спс' in msg_lower or 'посиб' in msg_lower or 'пасиб' in msg_lower:
answered = True
maybe_answer = ['Рады Вам помочь!', 'Пожалуйста =)']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
if re.search(r'\bпока\b', msg_lower):
v=1
if v==1:
v=0
answered = True
maybe_answer = ['Пока, удачи!', 'Удачи, '+nickname+'!', 'Пока!', 'До встречи!', 'Пока, '+nickname+'!', 'До встречи, '+nickname+'!']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)
if event.from_user:
if answered == True:
pass
if answered == False:
time.sleep(0.5)
sender(id, idu)
Ответы (2 шт):
Попробую поиграть в угадайку:
WORDS_LIST = ['хорошо', 'отлично', 'супер', 'офигено', 'офигенно', 'афигено', 'ах#ено', 'ах#енно', 'за#бись', 'за#бок', 'класс', 'клас', 'топ']
answered = True if any([w in msg_casefold for w in WORDS_LIST]) else False
if answered:
maybe_answer = ['Отлично, когда всё супер!', 'Вот и классненько', 'Супер!', 'Вот и хорошо!']
answer = random.choice(maybe_answer)
time.sleep(0.5)
sender(id, answer)