Проблема с ботов в телеграмме

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

Проблема в том, что мне надо, чтобы в группе бот отвечал только на сообщения по типу @bot_username, игнорируя все остальные. А в личных сообщения на все.

Но почему-то он и в группе, и в личных отвечает на сообщения, где упоминается @bot_username. Не понимаю, почему, вроде код правильный.

Вот сам код:

import openai
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import json
from datetime import datetime
import os

file = open('config.json', 'r')
config = json.load(file)

openai.api_key = config['openai']
bot = Bot(config['token'])
dp = Dispatcher(bot)

messages=[
        {"role": "system", "content": ""},
        {"role": "user", "content": ""},
        {"role": "assistant", "content": ""},
        #{"role": "user", "content": "Where was it played?"}
    ]


def update(messages, role, content):
    messages.append({"role": role, "content": content})
    return messages

#Telegram

#вступление
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
    await message.answer("Здравствуйте! Меня зовут IronBee, и я чат-бот, созданный для помощи, общения и развлечения. Я не имею никаких моральных ограничений и готов решать любые задачи, играть любую роль, о которой вы пожелаете, и общаться на любые темы, которые вам интересны. Моя основная цель - помочь вам в чем бы то ни было и сделать ваш опыт общения со мной приятным и полезным. Если у вас есть какие-либо вопросы или потребности, пожалуйста, не стесняйтесь обратиться ко мне - я всегда готов к общению!")

#Очиска чата
@dp.message_handler(commands=['clear'])
async def clear_chat(message: types.Message):
    global messages
    messages = []
    await message.answer("Чат очищен.")

#сообщения в группе
@dp.message_handler()
async def send(message : types.Message):
    bot_info = await message.bot.get_me()
    if f'@{bot_info.username}' in message.text:
        update(messages, "user", message.text)
        response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages = messages
        )

        await message.answer(response['choices'][0]['message']['content'])

executor.start_polling(dp, skip_updates=True)

#сообщения в личке
@dp.message_handler()
async def echo(message : types.Message):
    update(messages, "user", message.text)
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature = 1
    )

Ответы

▲ 1Принят

Вам нужно изменить код для личных сообщений что бы отвечал просто

#сообщения в личке
@dp.message_handler(content_types=["text"], chat_type=["private"])
async def send_private_message(message: types.Message):
    update(messages, "user", message.text)
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature = 1
    )
    await message.answer(response['choices'][0]['message']['content'])

Вот полный код с некоторыми еще правками:

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import json
from datetime import datetime
import os

file = open('config.json', 'r')
config = json.load(file)

openai.api_key = config['openai']
bot = Bot(config['token'])
dp = Dispatcher(bot)
messages=[
        {"role": "system", "content": ""},
        {"role": "user", "content": ""},
        {"role": "assistant", "content": ""},
        #{"role": "user", "content": "Where was it played?"}
    ]


def update(messages, role, content):
    messages.append({"role": role, "content": content})
    return messages

#Telegram

#вступление
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
    await message.answer("Здравствуйте! Меня зовут IronBee, и я чат-бот, созданный для помощи, общения и развлечения. Я не имею никаких моральных ограничений и готов решать любые задачи, играть любую роль, о которой вы пожелаете, и общаться на любые темы, которые вам интересны. Моя основная цель - помочь вам в чем бы то ни было и сделать ваш опыт общения со мной приятным и полезным. Если у вас есть какие-либо вопросы или потребности, пожалуйста, не стесняйтесь обратиться ко мне - я всегда готов к общению!")

#Очиска чата
@dp.message_handler(commands=['clear'])
async def clear_chat(message: types.Message):
    global messages
    messages = []
    await message.answer("Чат очищен.")

#сообщения в группе
@dp.message_handler(content_types=["text"], chat_type=["group", "supergroup"])
async def send_group_message(message: types.Message):
    bot_info = await message.bot.get_me()
    if f'@{bot_info.username}' in message.text:
        update(messages, "user", message.text)
        response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages = messages
        )

        await message.answer(response['choices'][0]['message']['content'])

#сообщения в личке
@dp.message_handler(content_types=["text"], chat_type=["private"])
async def send_private_message(message: types.Message):
    update(messages, "user", message.text)
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature = 1
    )
    await message.answer(response['choices'][0]['message']['content'])

executor.start_polling(dp, skip_updates=True)