"""
_
__ _____ ___ ___ ___ __| | ___ _ __
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
\ V /\__ \ __/ (_| (_) | (_| | __/ |
\_/ |___/\___|\___\___/ \__,_|\___|_|
Copyleft 2022 t.me/vsecoder
This program is free software; you can redistribute it and/or modify
"""
# meta developer: @vsecoder_m
version = (1, 0, 0)
from telethon import functions
from telethon.tl.types import Message
import asyncio
import logging
from .. import loader, utils # type: ignore
logger = logging.getLogger(__name__)
@loader.tds
class ChatGPTfreeMod(loader.Module):
"""
Бесплатный модуль для ChatGPT
https://t.me/Jarvis_IT_Assistant_bot
Сначала запустите бота и отключите уведомления
"""
strings = {
"name": "ChatGPTfree",
"loading": "🔄 Ваш запрос обрабатывается...",
"no_args": "🚫 Не указан текст для обработки!",
"start_text": "🤖 ChatGPT:\n",
"context_text": "❕ Создался новый диалог. Предыдущие запросы удалены.",
}
def __init__(self):
self.name = self.strings["name"]
async def client_ready(self, client, db):
self.client = client
self.db = db
self.gpt_free = "@Jarvis_IT_Assistant_bot"
async def message_q(
self,
text: str,
user_id: int,
mark_read: bool = False,
delete: bool = False,
ignore_answer: bool = False,
):
"""Отправляет сообщение и возращает ответ"""
async with self.client.conversation(user_id) as conv:
msg = await conv.send_message(text)
while True:
await asyncio.sleep(1)
response = await conv.get_response()
if mark_read:
await conv.mark_read()
if delete:
await msg.delete()
await response.delete()
if ignore_answer:
return response
if "✅ Запрос отправлен" in response.text:
continue
if "Ожидание ответа" in response.text:
continue
return response
async def chatgptfreecmd(self, message: Message):
"""
{text} - обработать текст через ChatGPT
"""
args = utils.get_args_raw(message)
if not args:
return await utils.answer(message, self.strings["no_args"])
await utils.answer(message, self.strings["loading"])
response = await self.message_q(
args, self.gpt_free, mark_read=True, delete=True, ignore_answer=False
)
text = self.strings["start_text"] + response.text.replace(
"/context", ".contextgpt"
)
return await utils.answer(message, text)
async def contextgptcmd(self, message: Message):
"""
- сбросить диалог и начать новый
"""
await self.message_q(
"/context", self.gpt_free, mark_read=True, delete=True, ignore_answer=True
)
return await utils.answer(message, self.strings["context_text"])