April 14, 2023

Telegram-бот на основе GPT-4

Telegram бота создаём через BotFather. Пишем /start, далее пишем /newbot.

Пишем название(нейм) бота.

Далее нам необходимо написать username бота. Пишем юзернейм, который оканчивается на "bot", либо "_bot"

После этого мы получаем API-Token бота, который нужен будет чуть позже

Для работы скрипта нужно получить Cookie Bing'a

Для получения cookie необходимо установить расширение, которое позволяет это сделать. Я использовал Cookie Editor.

Вы же можете использовать любой другой, в этом плане советовать ничего не буду, за Cookie Editor не ручаюсь.

После установки расширения включаем VPN, переходим на https://bing.com/, создаем почту Outlook(для удобства и быстроты), отправляем заявку на список ожидания (Сейчас вроде без него работает, но всё же).

После того, как доступ к чату с BingAI был получен, заходим на https://bing.com/chat, входим в созданный ранее аккаунт, далее заходим в установленное расширение и нажимаем на "Export".

После того, как мы нажали на "Export", необходимо создать файл "cookies.json" в папке, где находится файл скрипта.

После создания файла, вставляем туда то, что мы скопировали, когда нажали "Export".

Создаем файл с названием main.py, куда вставляем следующий код:

import asyncio
import re
from telebot.async_telebot import AsyncTeleBot
from EdgeGPT import Chatbot

BOT_TOKEN = 'token' # Вместо "token" вставить токен Telegram бота, который получили ранее
bot = AsyncTeleBot(BOT_TOKEN)

async def bing_chat(prompt):
    # Надо создать файл cookies.json в папке. ПУТЬ НЕ МЕНЯТЬ, ФАЙЛ cookies.json ДОЛЖЕН БЫТЬ В ПАПКЕ С СКРИПТОМ!
    gbot = Chatbot(cookiePath='./cookies.json')
    response_dict = await gbot.ask(prompt=prompt)
    return re.sub(r'\[\^\d\^\]', '', response_dict['item']['messages'][1]['text'])

@bot.message_handler(func=lambda message: True)
async def ask(message):
    try:
        prompt = message.text
        if not prompt:
            await bot.reply_to(message, "Пустой запрос")
        else:
            sent_message = await bot.reply_to(message, "Обработка запроса, ожидайте")
            bot_response = await bing_chat(prompt)
            await bot.edit_message_text(chat_id=sent_message.chat.id, message_id=sent_message.message_id, text=bot_response.replace('?\n\n', ''))
    except Exception as e:
        await bot.reply_to(message, "Bing по каким-то причинам решил остановить с вами диалог! Проверьте cookie!") # Такое случается, когда поднимается тема, которую Bing не хочет обсуждать

async def main():
    await bot.infinity_polling()

if __name__ == "__main__":
    asyncio.run(main())

После вставки кода, заменяем token на токен бота Telegram, который мы получили ранее(токен должен быть в кавычках).

Путь к cookies.json не трогаем! Этот файл должен быть в папке с скриптом!

Внимание: На данном этапе у нас должно быть 2 файла в одной папке: "main.py" и "cookies.json", которые нужны будут и в Linux, и в Windows!

Инструкция на Windows крайне проста и кратка.

Для работы скрипта нам необходим Python. Установим 3.10.6.

Cкачиваем установочный файл с официального сайта:

  • www.python.org/downloads/
  • (Прямая ссылка на версию 3.10.6)

Обязательно нажимаем на галочку "Add Python 3.10 to PATH".

Открываем консоль и прописываем следующую команду

pip install EdgeGPT --upgrade && pip install pyTelegramBotAPI && pip install aiohttp

После установки библиотек запускаем скрипт двойным нажатием по файлу с расширением .py, радуемся!

Инструкция на Linux

После того, как вы арендовали виртуальный сервер, вам необходимо на него зайти, делать мы это будем через Bitvise SSH Client.

Переходим по данной ссылке: bitvise.com/ssh-client-download , нажимаем на "Bitvise SSH Client installer", устанавливаем скачанный файл .exe.

После установки мы попадаем в такое меню:

Если установили Ubuntu, то вводим в поле Username "root"; В поле Host вводим айпи сервера, ставим Initial Method на "password", вводим пароль.

Теперь нажимаем "Log in", нажимаем "Accept and Save".

Теперь нажимаем "New Terminal Console" в левом меню.

Теперь мы попали в консоль сервера. Для понятности дальнейших действий: На Linux вставлять скопированное в буфер обмена необходимо нажатием правой кнопки мыши в консоли.

После запуска сервера вписываем в консоль следующее:

apt update && apt upgrade && apt install pip && apt install screen && sudo apt-get install python3.10

Этой командой мы установили Python нужной версии, установили pip, обновили apt, установили screen.

На Linux для работы скрипта 24/7 необходимо установить Screen, что мы сделали выше.

Теперь нажимаем "New SFTP windows":

Мы попали в файлы сервера, в папку "root".

Нажимаем правую кнопку мыши в файловой системе сервера, там кликаем на "Create folder", создаем папку с названием "bing".

Переходим в созданную папку двойным кликом.

Теперь переносим туда два файла: Скрипт с расширением .py, и cookies.json

Теперь возвращаемся в консоль сервера.

Прописываем "cd bing".

Далее прописываем следующую команду:

pip install EdgeGPT --upgrade && pip install pyTelegramBotAPI && pip install aiohttp

Теперь, если вы всё делали по гайду, мы прописываем следующую команду:

screen -S bing python3 main.py

Таким образом, если не произошла ошибка - вы запустили скрипт для работы 24/7, теперь просто закрываете терминал и выходите с сервера, проверяя работоспособность скрипта.