Всем привет, сегодня скину код довольно простого бота на телеграм.
Беру во внимание, что это не инструкция для новичка, и что куда и откуда - у вас представление есть. Если нет, то пишите в комментариях по теме, подскажу.
Начнём.
Что нам нужно (в это я углубляться не буду):
1. Полученный Токен API от ChatGPT
2. Полученный Токен API от BotFather в Telegram.
3. Установленный PyCharm или VS Code.
Я открыл PyCharm и создал новый проект с файлом main.py
Открываю внизу сбоку Терминал и ставлю нужные библиотеки: openai и aiogram
pip install openai aiogram
Создание бота на aiogram и GPT 3.5 Turbo с запоминанием контекста общения.
import openai
from aiogram importBot, types
from aiogram.dispatcher importDispatcherfrom aiogram.utils import executor
telegram_token ="API от Botfather"
openai.api_key ="API токен от OpenAI для ChatGPT"
bot =Bot(telegram_token)
dp =Dispatcher(bot)
messages =[{"role":"system","content":"You are a programming assistant, helping users with Python programming"},]def update(messages, role, content):
messages.append({"role": role,"content": content})return messages
@dp.message_handler()
async def send(message : types.Message):
update(messages,"user", message.text)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",# Модель с контекстом
messages=messages,# База данных на основе словаря)
await message.answer(response['choices'][0]['message']['content'], parse_mode="markdown")if __name__ =='__main__':
executor.start_polling(dp, skip_updates=True)
Данный код - это скрипт телеграм-бота с использованием OpenAI ChatGPT для ответа на сообщения. Разберем некоторые его составные части.
В начале мы импортировали нужные нам библиотеки для работы с OpenAI и aiogram для телеграм-бота. Далее задали переменные токенов для бота.
Затем создаются объекты Bot и Dispatcher, которые используются для обработки сообщений от пользователей и отправки ответов.
Переменная messages содержит список словарей с сообщениями от пользователя и системы.
В сообщение с ролью системы мы наделили ChatGPT ролью помощника программиста на Python. Вы же можете указать здесь всё что угодно, но обязательно развернуто и на английском языке.
Функция update() используется для добавления новых сообщений в список. Функция send() обрабатывает сообщения от пользователя, добавляет их в messages и отправляет в ChatGPT с использованием модели GPT-3.5 Turbo и базы данных на основе messages. Ответ отправляется обратно пользователю через телеграм-бота.
Блок if name == 'main': используется для запуска бота с использованием функции executor.start_polling().
Запускаем бота на исполнение:
Проверяем работу бота:
Класс! Отвечает и в контексте!
Вот другой вариант кода для бота.
Пробуйте который вам понравится больше:
import openai
from aiogram importBot, types
from aiogram.dispatcher importDispatcherfrom aiogram.utils import executor
telegram_token ="API от Botfather"
openai.api_key ="API токен от OpenAI для ChatGPT"
bot =Bot(telegram_token)
dp =Dispatcher(bot)@dp.message_handler()
async def send(message : types.Message):
response = openai.Completion.create(
model="gpt-3.5-turbo",
prompt=message.text,
temperature=0.9,
max_tokens=2000,
top_p=1.0,
frequency_penalty=0.0,
presence_penalty=0.6)print(message.text)
await message.answer(response['choices'][0]['text'])if __name__ =='__main__':
executor.start_polling(dp, skip_updates=True)
Вы можете выбирать и другие варианты моделей общения, например: model="text-davinci-003". Но учтите, что эта модель будет дороже по количеству токенов, и качество её ничем не лучше.
Конфигурация Dockerfile для запуска бота
Рядом с файлом main.py создаем файл Dockerfile, где мы будем билдить контейнер с Python для запуска проекта со следующим содержимым:
FROM python:alpine
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1# Установим директорию для работы
WORKDIR /telegram_bot
COPY ./requirements.txt ./# Устанавливаем зависимости и gunicorn
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r ./requirements.txt
# Копируем файлы и билд
COPY ././
RUN chmod -R 777./
Эта конфигурация относится к созданию Docker-контейнера на основе образа Python Alpine, который используется для развертывания Python-приложения, в данном случае, телеграм-бота.
В первой строке указывается базовый образ python:alpine, который используется для создания контейнера. Alpine - это минималистичный дистрибутив Linux, который предлагает меньший размер и более быстрое время запуска контейнеров.
Далее, в строках ENV PYTHONUNBUFFERED=1 и ENV PYTHONDONTWRITEBYTECODE=1 определяются переменные среды. PYTHONUNBUFFERED устанавливает флаг для Python, чтобы он выводил данные в стандартный поток вывода без буферизации, а PYTHONDONTWRITEBYTECODE отключает создание .pyc-файлов, чтобы избежать проблем с обновлением кода в контейнере.
В строке WORKDIR /telegram_bot устанавливается рабочая директория в контейнере, куда будут копироваться все файлы проекта.
Далее, в строках COPY ./requirements.txt ./ и RUN pip install --no-cache-dir -r ./requirements.txt устанавливаются зависимости проекта. Сначала копируется файл requirements.txt в текущую директорию в контейнере, а затем запускается команда pip install, чтобы установить все зависимости проекта.
В строке COPY ./ ./ копируются все файлы проекта в рабочую директорию в контейнере.
Наконец, в строке RUN chmod -R 777 ./ устанавливается разрешение на чтение, запись и выполнение для всех файлов в рабочей директории проекта в контейнере. Это делается для того, чтобы приложение внутри контейнера имело необходимые права для чтения и записи в файлы.
В итоге, данная конфигурация создает Docker-контейнер, в котором установлены все необходимые зависимости для работы телеграм-бота с ChatGPT и задана правильная рабочая директория для запуска приложения.
Конфигурация docker-compose для запуска бота
Для того чтобы нам всё аккуратно развернуть в контейнере на сервере, мы создаем файл docker-compose.yml со следующим содержимым:
Запускаем построение нашего контейнера docker compose build:
В завершении будет выглядеть всё вот так:
Теперь поднимаем сам контейнер docker-compose up -d (-d чтобы все запустилось в фоне)
Проверяем что наш бот отвечает нам "живя" на сервере:
Готово.
Вот так достаточно быстро и просто получился мануал не просто как запустить своего бота, но и ещё как развернуть любого бота на VPS сервере.
Удачи!
Предупреждение:
Имейте ввиду, что данный код бота предполагает общение с любым из пользователей. Поэтому, не распространяйтесь его именем, или внесите поправки в код, чтобы он общался только с вами!
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Всем привет, сегодня скину код довольно простого бота на телеграм.
Беру во внимание, что это не инструкция для новичка, и что куда и откуда - у вас представление есть. Если нет, то пишите в комментариях по теме, подскажу.
Начнём.
Что нам нужно (в это я углубляться не буду):
1. Полученный Токен API от ChatGPT
2. Полученный Токен API от BotFather в Telegram.
3. Установленный PyCharm или VS Code.
pip install openai aiogramСоздание бота на aiogram и GPT 3.5 Turbo с запоминанием контекста общения.
Данный код - это скрипт телеграм-бота с использованием OpenAI ChatGPT для ответа на сообщения. Разберем некоторые его составные части.
В начале мы импортировали нужные нам библиотеки для работы с OpenAI и aiogram для телеграм-бота. Далее задали переменные токенов для бота.
Затем создаются объекты Bot и Dispatcher, которые используются для обработки сообщений от пользователей и отправки ответов.
Переменная messages содержит список словарей с сообщениями от пользователя и системы.
В сообщение с ролью системы мы наделили ChatGPT ролью помощника программиста на Python. Вы же можете указать здесь всё что угодно, но обязательно развернуто и на английском языке.
Функция update() используется для добавления новых сообщений в список. Функция send() обрабатывает сообщения от пользователя, добавляет их в messages и отправляет в ChatGPT с использованием модели GPT-3.5 Turbo и базы данных на основе messages. Ответ отправляется обратно пользователю через телеграм-бота.
Блок if name == 'main': используется для запуска бота с использованием функции executor.start_polling().
Запускаем бота на исполнение:
Проверяем работу бота:
Класс! Отвечает и в контексте!
Вот другой вариант кода для бота.
Пробуйте который вам понравится больше:
Вы можете выбирать и другие варианты моделей общения, например: model="text-davinci-003". Но учтите, что эта модель будет дороже по количеству токенов, и качество её ничем не лучше.
Конфигурация Dockerfile для запуска бота
Рядом с файлом main.py создаем файл Dockerfile, где мы будем билдить контейнер с Python для запуска проекта со следующим содержимым:
Эта конфигурация относится к созданию Docker-контейнера на основе образа Python Alpine, который используется для развертывания Python-приложения, в данном случае, телеграм-бота.
В первой строке указывается базовый образ python:alpine, который используется для создания контейнера. Alpine - это минималистичный дистрибутив Linux, который предлагает меньший размер и более быстрое время запуска контейнеров.
Далее, в строках ENV PYTHONUNBUFFERED=1 и ENV PYTHONDONTWRITEBYTECODE=1 определяются переменные среды. PYTHONUNBUFFERED устанавливает флаг для Python, чтобы он выводил данные в стандартный поток вывода без буферизации, а PYTHONDONTWRITEBYTECODE отключает создание .pyc-файлов, чтобы избежать проблем с обновлением кода в контейнере.
В строке WORKDIR /telegram_bot устанавливается рабочая директория в контейнере, куда будут копироваться все файлы проекта.
Далее, в строках COPY ./requirements.txt ./ и RUN pip install --no-cache-dir -r ./requirements.txt устанавливаются зависимости проекта. Сначала копируется файл requirements.txt в текущую директорию в контейнере, а затем запускается команда pip install, чтобы установить все зависимости проекта.
В строке COPY ./ ./ копируются все файлы проекта в рабочую директорию в контейнере.
Наконец, в строке RUN chmod -R 777 ./ устанавливается разрешение на чтение, запись и выполнение для всех файлов в рабочей директории проекта в контейнере. Это делается для того, чтобы приложение внутри контейнера имело необходимые права для чтения и записи в файлы.
В итоге, данная конфигурация создает Docker-контейнер, в котором установлены все необходимые зависимости для работы телеграм-бота с ChatGPT и задана правильная рабочая директория для запуска приложения.
Конфигурация docker-compose для запуска бота
Для того чтобы нам всё аккуратно развернуть в контейнере на сервере, мы создаем файл docker-compose.yml со следующим содержимым:
version: "3.9" services: telegram-bot: container_name: telegram-bot working_dir: /telegram_bot restart: always build: context: . dockerfile: Dockerfile command: sh -c "python main.py"Создаем файл requirements.txt для выстраивания зависимостей
Для его создания в терминале нашего проекта с ботом введите следующую команду: pip freeze > requirements.txt
У меня создался файл с таким содержимым:
Переносим все файлы на сервер VPS и разворачиваем контейнер.
Для переноса воспользуемся FileZilla.
А сервер арендуем на Aeza.net
Загрузили все на сервер:
Зашли на сервер и первым делом обновили его apt update:
Ставим docker и docker-compose. Я это сделаю своим скриптом:
apt update && apt install curl -y && curl -Of https://raw.githubusercontent.com/DigneZzZ/dwg/main/tools/docker.sh && chmod +x docker.sh && ./docker.shПереходим в папку с ботом: cd telegram_bot:
Запускаем построение нашего контейнера docker compose build:
В завершении будет выглядеть всё вот так:
Теперь поднимаем сам контейнер docker-compose up -d (-d чтобы все запустилось в фоне)
Проверяем что наш бот отвечает нам "живя" на сервере:
Готово.
Вот так достаточно быстро и просто получился мануал не просто как запустить своего бота, но и ещё как развернуть любого бота на VPS сервере.
Удачи!
Предупреждение:
Имейте ввиду, что данный код бота предполагает общение с любым из пользователей. Поэтому, не распространяйтесь его именем, или внесите поправки в код, чтобы он общался только с вами!
Основу взял с сайта proghunter
TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение