Я разрабатываю чат-бот для Telegram с именем "Джокер". Это прекрасно работает в частной беседе. Целая тренировка настроена, чтобы ответить на несколько вопросов. Но когда он помещен в группу, он отвечает на все сообщения, отправленные группе, создавая беспорядок в чате. Было бы хорошо, если бы мой бот мог слышать разговоры группы на заднем плане и вмешиваться, только если его имя "Джокер" указано в одном предложении. Обычно он отвечал на вопросы до тех пор, пока в предложении содержалось слово «Джокер». По этой причине я пытаюсь реализовать эту функцию, но она не работает должным образом.
Текущая реакция
- Гиллан: Доброе утро, ребята!
- Мици Дюпри: Доброе утро, Гиллан!
... Джокер печатает
- Гиллан: Доброе утро, Джокер!
... Джокер печатает
... Джокер печатает
Communication.py
def respond(self, message):
"""
Receive message from user and returns corresponding answer.
"""
if re.search("joker", message, re.IGNORECASE):
joker_in_message = True
else:
joker_in_message = False
message_without_joker = re.sub(r'\bjoker\b', '', message, flags=re.IGNORECASE)
#remove duplicate spaces
message_without_joker = re.sub(r'\s{2,}', ' ', message_without_joker)
if joker_in_message and len(message) > 50 and self.watson_usage:
top_answer = get_analysis(message_without_joker)
return f"Hmm, you're talking about {top_answer}"
if joker_in_message and len(message.strip()) == len("joker"):
return "Something wrong is not right, text me what "\
"you told my creators!" \
"Type /info to learn more."
elif joker_in_message:
return self.comm.get_response(self.clean(message_without_joker))
Приложение. py
def text_message(self, bot, update):
self.send_type_action(bot, update)
if not self.check_for_emotion(update):
message = update.effective_message.text
answer = self.comm.respond(message)
if answer:
update.effective_message.reply_text(answer)
return 0