Телеграм бот не отвечает на упоминание его юзернейма в группе

Рейтинг: 0Ответов: 0Опубликовано: 16.04.2023

Проблема в том что бот не отвечает на его уопминание через @. При чём, насколько я понял, он в целом не должен так делать из-за настроек приватности бота в BotFather, где указано, что при включеном состоянии бот должен отвечать на его упоминание в сообщении:

введите сюда описание изображения

Эта настройка включена, но при этом бот никак не хочет откликаться на сообщение. К тому же на использование команд(вообще любых) он отвечает. Нужны ли какие либо дополнительные хандлеры что бы он мог видеть свое упоминание? Пишу на python библиотекой pytelegrambotAPI

import telebot
import openai
from threading import Thread
import time

bot_name="@botname"

token="token"

bot=telebot.TeleBot(token)

# Set up OpenAI API client
openai.api_key = "api"

picture_verbs=[ 'portray','depict', 'illustrate', 'render', 'express', 'delineate', 'sketch', 'draw',
               'изображать', 'отобразить', 'нарисовать', 'нарисовывать', 'наделить образом', 
               'изобразить в рисунке', 'намалевать', 'находить воплощение', 'изобразить на картике', 'нарисовать скетч',
               'изобрази', 'отобрази', 'нарисуй','прорисуй','' 'нарисовывай', 'надели образом', 'изобрази в рисунке', 'намалевай',
                'находи воплощение', 'изобрази на картике', 'нарисуй скетч', 'сгенерируй','сгенерировать',
                'зобразити', 'відобразити', 'намалювати', 'наділити обрисами', 'зобразити в малюнку', 'знайти втілення',
                  'зобразити на картинці', 'намалювати ескиз', 'зобрази', 'відобрази', 'намалюй', 'наділи обрисами', 
                  'зобрази в малюнку', 'знайди втілення', 'зобрази на картинці', 'намалюй ескиз'
               ]

first_message={"role": "system", "content": "Ти добрий асистент. Ти повинен відповідати людям на тій мові, на якій вони тебе питають."}
history={}

#адаптация сообщения для генерации картинки
def adapt(message): 
    for word1 in message.split():
        for word2 in picture_verbs:
            if word1==word2:
                message=message.split(word1,1)[1] 
                return message
    return False

#генерация картинки
def generate_picture(message):
    response = openai.Image.create(
        prompt=message,
        n=1,
        size="1024x1024"
    )   
    return response['data'][0]['url']

#генерация ответа
def generate_reply(user_id):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
         messages=history[user_id],
        max_tokens=1000
        )
    return response['choices'][0]['message']['content'] 



@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    user_id=message.from_user.id
    if user_id in history:
        bot.send_message(message.chat.id, "Yeah, I remember you.")
    else:
        bot.send_message(message.chat.id, "Hi! How can I help you?",  reply_to_message_id=message.message_id)





@bot.message_handler(commands=['clear'])
def clear_history(message):
    user_id=message.from_user.id
    history[user_id]=[first_message, ]
    bot.send_message(message.chat.id, "Dialogue history was cleared", reply_to_message_id=message.message_id)

    
# Define a handler for text messages

@bot.message_handler(func=lambda message: True )
def send_reply(message):
    
    if bot_name in message.text or message.chat.type == "private" or message.reply_to_message and message.reply_to_message.from_user.id == bot.get_me().id:
        gen_words=adapt(message.text.lower())
        if gen_words:
            a=False
            def send_action():
                while a==False:
                    bot.send_chat_action(message.chat.id, 'upload_photo')
                    time.sleep(5)
            th=Thread(target=send_action, args=())
            th.start()
            try:
                generate_picture(gen_words)
                bot.send_photo(message.chat.id, generate_picture(message.text))
            except openai.error.InvalidRequestError:
                bot.send_message(message.chat.id, "Sorry,your request was rejected as a result of our safety system. Try something different.")   
            a=True  


        else:
            
            a=False
            def typing_action():
                while a==False:
                    bot.send_chat_action(message.chat.id, 'typing')
                    time.sleep(5)
                    

            th=Thread(target=typing_action, args=())
            th.start()

            # gettin id of current user
            user_id = message.from_user.id

            if user_id in history:
                history[user_id].append({"role":"user", "content":message.text})
            else:
                history[user_id]=[first_message, {"role":"user", "content":message.text} ]

            
            bot.send_chat_action(message.chat.id, 'typing')
            # Call OpenAI's GPT-3 API to generate a reply
            try:
                reply=generate_reply(user_id)
            except openai.error.InvalidRequestError:
                history[user_id]=[first_message, {"role":"user", "content":message.text} ]
                response = generate_reply(user_id)
                reply = "The previous chat history was cleared to prevent the limit exceeding.\n" + response
            except:
                reply="Sorry, something went wrong."
            
            a=True
            history[user_id].append({"role": "assistant", "content": reply}) #save gpt reply

            # Reply to the user with the generated reply
            bot.send_message(message.chat.id, reply,  reply_to_message_id=message.message_id)



bot.infinity_polling()

Ответы

Ответов пока нет.