June 28
Подключаем ChatGPT к Telegram Premium
В данной статье предоставлен очень укороченная версия кода, которая не включает в себя сохранения контекста прошлых сообщений, а так же не сохраняет количество активных подключений бота к профилям и не обновляет их состояния. Этот код сделан лишь для того, чтобы показать как можно реализовать новые фишки Telegram Premium.
Перед стартом необходимо подключить Telegram Premium к вашему аккаунту.
- Создаем бота в https://t.me/BotFather и включаем в нём Business mode
- Подключаем своего бота к профилю Telegram и выбираем чаты, где он будет работать (или же ничего не делаем и он будет отвечать всем кто ему пишет).
- Скачиваем Python: https://www.python.org/downloads/ (тест производился на версии Python 3.11.6) (ПРИ УСТАНОВКЕ PYTHON НЕ ЗАБУДЬТЕ ПОСТАВИТЬ ГАЛОЧКУ ADD TO PATH)
- Открываем консоль и устанавливаем необходимые модули:
pip install aiogram pip install g4f
- Создаем файл с расширением .py и вставляем тестовый код:
import asyncio from g4f.client import AsyncClient from g4f.Provider import Ecosia from aiogram import (Router, Bot, Dispatcher, F, types) import logging router = Router(name=__name__) lock = asyncio.Lock() logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) async def response_gpt(message): client = AsyncClient( provider=Ecosia ) # Провайдер Ecosia не работает в РФ, если вы не из РФ или сервер не РФ, можете неиспользовать прокси и удалить строку ниже client.proxies = { "http": "http://user:pass@ip:port" , "https": "http://user:pass@ip:port" } try: completion = await client.chat.completions.create( max_tokens=4096, model="", messages=message, ) return completion.choices[0].message.content except Exception as ex: print(ex) return None @router.business_message(F.text) async def handler_message(message: types.Message): async with lock: user_id = message.chat.id logger.info(f"Received business message from {user_id}: {message.text}") messages = [ {"role": "system", "content": "Привет! Ты - ИИ-помощник для бизнеса в Telegram. Отвечай на вопросы пользователей"}, {"role": "user", "content": message.text} ] response = await response_gpt(messages) if response is None: await message.answer("Я не понимаю вас. Попробуй еще раз.") else: logger.info(f"Response sent to business chat: {response}") await message.answer(response) async def main() -> None: bot = Bot(token="TOKEN") dp = Dispatcher() dp.include_router(router) await bot.delete_webhook(drop_pending_updates=True) await dp.start_polling(bot) asyncio.run(main())