Telegram bot с ChatGpt на Python.
Это руководство по созданию ChatGPT бота Telegram всего несколькими строками кода на ЯП Python. Независимо от того, являетесь ли вы профессионалом в области программирования или только начинаете, мы подготовили для вас пошаговое руководство. Приготовьтесь произвести революцию в ваших чатах и хорошенько повеселиться!
@vistehno – chatgpt в телеграме.
1. Для начала убедитесь, что на вашем компьютере установлен Python.
Если python не установлен, инструкция тут:
2. Затем получите учетные данные для аутентификации Telegram API.
В начале вам нужно будет создать нового бота и получить его API token. Не волнуйтесь, это очень просто! Просто пообщайтесь с ботом BotFather в Telegram, и он поможет вам с реализацией этого процесса. Следуйте этим шагам:
Откройте диалог с ботом BotFather в Telegram, выполнив поиск “@BotFather” в строке поиска. Введите команду “/newbot”, чтобы создать нового бота. Следуйте инструкциям, чтобы выбрать имя и логин для вашего бота. Имя пользователя должно заканчиваться на “bot” (например, ”my_new_bot”).
Как только бот будет создан, BotFather предоставит вам токен. Этот токен используется для аутентификации вашего бота и предоставления ему доступа к Telegram API. Скопируйте токен и используйте его в коде вашего бота для аутентификации и доступа к API. Не делитесь токеном вашего бота ни с кем.
Затем вам нужно будет получить ID чата канала, который вы только что создали в Telegram. Этот ID является уникальным идентификатором и используется, когда кто-то хочет интегрировать Telegram со своими собственными приложениями или сервисами.
Отправьте сообщение на этот канал через API бота, используя своё имя канала и токен доступа.
{"ok":true,
"result":{
"message_id":191,
"sender_chat":{
"id":-1001527664788,
"title":"Test Channel Name",
"username":"TestChannel","type":"channel"
},
"chat":{
"id":-1001527664788,
"title":"",
"username":"TestChannel","type":"channel"
},
"date":1670434355,
"text":"123"
}
}
Вы найдёте идентификатор канала в разделе chat/id.
Важно предоставить вашему боту права администратора, чтобы он мог выполнять все необходимые задачи.
Внимание всем программистам! Эти ID токенов доступа могут выглядеть красиво, но они просто для галочки. Далее вам понадобится свой собственный для вашего приложения.
3. Пришло время получить свой API-ключ и подключиться к движку OpenAI.
Если в вашем регионе ChtGpt недоступен, вот инструкция по получению апи ключа,
Чтобы получить API-ключ от OpenAI, вам нужно будет создать учётную запись на веб-сайте OpenAI . Как только у вас появится учётная запись, вы сможете получить доступ к своим API-ключам, перейдя на вкладку “API Keys” на панели управления пользователя.
Оттуда вы можете сгенерировать новый ключ и использовать его для аутентификации ваших запросов API. Важно хранить этот API-ключ в секрете и в безопасности, чтобы защитить вашу учётную запись.
Имейте в виду, что OpenAI может ограничить количество вызовов API, которые вы можете выполнять. С личной учётной записью вам предоставляется грант в размере 18 долларов США для использования в запросах API. Обязательно ознакомьтесь с условиями предоставления услуг и информацией о ценах на веб-сайте OpenAI перед использованием API.
Подключение к Text-davinci-003
Text-davinci-003 – это большая языковая модель, разработанная OpenAI. Она считается одной из наиболее эффективных языковых моделей, доступных в настоящее время, благодаря своей способности генерировать текст, похожий на человеческий, и выполнять широкий спектр языковых задач. Она был обучена на наборе данных из миллиардов слов и может генерировать связный текст, который читается так, как будто он был написан человеком.
С помощью нескольких простых шагов и немного магии Python вы сможете подключить и развернуть своего бота ChatGPT в своей группе в кратчайшие сроки. Давайте приступим к написанию кода!
4. Начните писать код на Python.
Для начала мы импортируем необходимые библиотеки и установим параметр аутентификации ключа.
# 1. импорт стандартных библиотек
import json
import os
import threading
# серктный ключ чатджипити, полученный ранее
API_KEY = 'xxxxxxxxxxxsecretAPIxxxxxxxxxx'
# Models: text-davinci-003,text-curie-001,text-babbage-001,text-ada-001
MODEL = 'text-davinci-003'
#токен, полученный от телеграм бота ботфазер
BOT_TOKEN = 'xxxxxxbotapikeyxxxxx'
# определяем личность бота, мы сделали бота-шутника для примера
BOT_PERSONALITY = 'Answer in a funny tone, '
Вводим параметр BOT_PERSONALITY
— задайте стиль ответов ChatGpt в телеграме ! Используйте эту удобную константу, чтобы придать вашему боту определённый тон или манеру разговора, например, дружелюбный, профессиональный или с чувством юмора. Установив параметр BOT_PERSONALITY, вы можете настроить способ общения ChatGPT с вашими пользователями и создать более персонализированный и привлекательный объект:
Вот 15 видов персоналий, которые можно выбрать
of ChatGPT:
1. Friendly
2. Professional
3. Humorous
4. Sarcastic
5. Witty
6. Sassy
7. Charming
8. Cheeky
9. Quirky
10. Laid-back
11. Elegant
12. Playful
13. Soothing
14. Intense
15. Passionate
Затем создайте функцию, которая получает ответ от чат-бота OpenAI.
# 2a. ответ от openAi
def openAI(prompt):
# делаем запрос на сервер с ключами
response = requests.post(
'https://api.openai.com/v1/completions',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'model': MODEL, 'prompt': prompt, 'temperature': 0.4, 'max_tokens': 300}
)
result = response.json()
final_result = ''.join(choice['text'] for choice in result['choices'])
return final_result
# 2b. функция обработки изображений
def openAImage(prompt):
# запрос на OpenAI API
resp = requests.post(
'https://api.openai.com/v1/images/generations',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'prompt': prompt,'n' : 1, 'size': '1024x1024'}
)
response_text = json.loads(resp.text)
return response_text['data'][0]['url']
Эта функция 2.a отправит POST-запрос в OpenAI API с заданными входными данными (например, “Что такое энтропия?”) для анализа API. Параметр temperature определяет, насколько случайным будет сгенерированный ответ — более низкие значения означают более предсказуемый текст. Параметр max_tokens устанавливает ограничение на количество слов и знаков препинания в ответе. И вуаля! Функция вернёт сгенерированный ответ из указанной модели OpenAI.
Далее, пришло время создать функцию, которая отправляет сообщение определённой группе в Telegram:
# 3a. функция отправки в заданную телеграм группу
def telegram_bot_sendtext(bot_message,chat_id,msg_id):
data = {
'chat_id': chat_id,
'text': bot_message,
'reply_to_message_id': msg_id
}
response = requests.post(
'https://api.telegram.org/bot' + BOT_TOKEN + '/sendMessage',
json=data
)
return response.json()
# 3b. Функция, которая отправляет изображение в определенную группу телеграмм
def telegram_bot_sendimage(image_url, group_id, msg_id):
data = {
'chat_id': group_id,
'photo': image_url,
'reply_to_message_id': msg_id
}
url = 'https://api.telegram.org/bot' + BOT_TOKEN + '/sendPhoto'
response = requests.post(url, data=data)
return response.json()
Приведённая выше функция 3.a отправляет сообщение определённой группе Telegram с помощью Telegram API. Функция принимает три аргумента: bot_message, который является сообщением, подлежащим отправке, chat_id, который является уникальным идентификатором чата, в который будет отправлено сообщение, и msg_id, который задаёт уникальный идентификатор сообщения, на которое вы хотите ответить. Функция использует библиотеку запросов для отправки запроса GET в Telegram API с необходимыми параметрами, включая ключ API, идентификатор чата и сообщение для отправки.
Теперь пришло время перейти к самому интересному— созданию функции, которая извлекает последние запросы от пользователей в группе Telegram, генерирует умный ответ с помощью OpenAI и отправляет его обратно в группу. Давайте сделаем это!
# 4. Функция получения последних запросов от пользователей в группе Telegram,
# генерирует ответ, используя OpenAI, и отправляет ответ обратно в группу.
def Chatbot():
# Retrieve last ID message from text file for ChatGPT update
cwd = os.getcwd()
filename = cwd + '/chatgpt.txt'
if not os.path.exists(filename):
with open(filename, "w") as f:
f.write("1")
else:
print("File Exists")
with open(filename) as f:
last_update = f.read()
# Проверить наличие новых сообщений в группе Telegram
url = f'https://api.telegram.org/bot{BOT_TOKEN}/getUpdates?offset={last_update}'
response = requests.get(url)
data = json.loads(response.content)
for result in data['result']:
try:
# Проверить наличие новых сообщений
if float(result['update_id']) > float(last_update):
# Checking for new messages that did not come from chatGPT
if not result['message']['from']['is_bot']:
last_update = str(int(result['update_id']))
# Получение идентификатора сообщения отправителя запроса
msg_id = str(int(result['message']['message_id']))
# Retrieving the chat ID
chat_id = str(result['message']['chat']['id'])
# Получение идентификатора сообщения отправителя запроса
if '/img' in result['message']['text']:
prompt = result['message']['text'].replace("/img", "")
bot_response = openAImage(prompt)
print(telegram_bot_sendimage(bot_response, chat_id, msg_id))
# Проверка того, что пользователь упомянул имя пользователя чат-бота в сообщении
if '@ask_chatgptbot' in result['message']['text']:
prompt = result['message']['text'].replace("@ask_chatgptbot", "")
# Вызов OpenAI API с использованием личности бота
bot_response = openAI(f"{BOT_PERSONALITY}{prompt}")
# Sending back response to telegram group
print(telegram_bot_sendtext(bot_response, chat_id, msg_id))
# Проверка того, что пользователь отвечает боту ChatGPT
if 'reply_to_message' in result['message']:
if result['message']['reply_to_message']['from']['is_bot']:
prompt = result['message']['text']
bot_response = openAI(f"{BOT_PERSONALITY}{prompt}")
print(telegram_bot_sendtext(bot_response, chat_id, msg_id))
except Exception as e:
print(e)
# Updating file with last update ID
with open(filename, 'w') as f:
f.write(last_update)
return "done"
Но подождите, это ещё не все! Мы также убедимся, что они от реального пользователя (а не от надоедливого бота), и отправим их в OpenAI API для анализа, если в них упоминается имя пользователя бота и они являются ответом боту. Убедитесь, что вы переименовали своего бота в скрипте, заменив “@ask_chatgptbot” на желаемое имя.
Итак, последний шаг! Пришло время добавить компонент планирования в ваш бот, чтобы он мог регулярно проверять наличие новых сообщений в группе и отправлять ответы по мере необходимости. Потоковая библиотека Python может помочь вам в этом:
# 5 Запускаем проверку каждые 5 секунд на наличие новых сообщений
def main():
timertime=5
Chatbot()
# 5 секунд таймер
threading.Timer(timertime, main).start()
# запускаем функцию main
if __name__ == "__main__":
main()
Та-да! Представляем плоды вашего труда: окончательный код на Python для вашего нового весёлого чат-бота. Просто скопируйте и вставьте этого “парня” в свой любимый редактор кода, подключите свои API-ключи и идентификатор группы чата, и вы в мгновение ока будете общаться с ChatGPT.
Полная версия кода (github link here):
# 1. Начните с импорта необходимых библиотек и настройки клиентов API
import requests
import json
import os
import threading
# OpenAI секретный ключ
API_KEY = 'xxxxxxxxxxxsecretAPIxxxxxxxxxx'
# Models: text-davinci-003,text-curie-001,text-babbage-001,text-ada-001
MODEL = 'text-davinci-003'
# Telegram токен бота
BOT_TOKEN = 'xxxxxxbotapikeyxxxxx'
# определяем характер телеграм бота
BOT_PERSONALITY = 'Answer in a funny tone, '
# 2a. получаем ответ от OpenAI
def openAI(prompt):
# запрос на OpenAI API
response = requests.post(
'https://api.openai.com/v1/completions',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'model': MODEL, 'prompt': prompt, 'temperature': 0.4, 'max_tokens': 300}
)
result = response.json()
final_result = ''.join(choice['text'] for choice in result['choices'])
return final_result
# 2b. функци получения изображения от OpenAI
def openAImage(prompt):
# запрос на OpenAI API
resp = requests.post(
'https://api.openai.com/v1/images/generations',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'prompt': prompt,'n' : 1, 'size': '1024x1024'}
)
response_text = json.loads(resp.text)
return response_text['data'][0]['url']
# 3a. функция отправки сообщения в группу
def telegram_bot_sendtext(bot_message,chat_id,msg_id):
data = {
'chat_id': chat_id,
'text': bot_message,
'reply_to_message_id': msg_id
}
response = requests.post(
'https://api.telegram.org/bot' + BOT_TOKEN + '/sendMessage',
json=data
)
return response.json()
# 3b. функция отправки картинки в группу
def telegram_bot_sendimage(image_url, group_id, msg_id):
data = {
'chat_id': group_id,
'photo': image_url,
'reply_to_message_id': msg_id
}
url = 'https://api.telegram.org/bot' + BOT_TOKEN + '/sendPhoto'
response = requests.post(url, data=data)
return response.json()
# 4. Функция получения последних запросов от пользователей в группе Telegram,
# генерирует ответ, используя OpenAI, и отправляет ответ обратно в группу.
def Chatbot():
# Получить последнее сообщение ID из текстового файла для обновления ChatGPT
cwd = os.getcwd()
filename = cwd + '/chatgpt.txt'
if not os.path.exists(filename):
with open(filename, "w") as f:
f.write("1")
else:
print("File Exists")
with open(filename) as f:
last_update = f.read()
# Проверить наличие новых сообщений в группе Telegram
url = f'https://api.telegram.org/bot{BOT_TOKEN}/getUpdates?offset={last_update}'
response = requests.get(url)
data = json.loads(response.content)
for result in data['result']:
try:
# Проверка нового сообщения
if float(result['update_id']) > float(last_update):
# Проверка новых сообщений, пришедших не из chatGPT
if not result['message']['from']['is_bot']:
last_update = str(int(result['update_id']))
# Получение идентификатора сообщения отправителя запроса
msg_id = str(int(result['message']['message_id']))
# получаем ID
chat_id = str(result['message']['chat']['id'])
# проверка нужна ли картинка пользователю
if '/img' in result['message']['text']:
prompt = result['message']['text'].replace("/img", "")
bot_response = openAImage(prompt)
print(telegram_bot_sendimage(bot_response, chat_id, msg_id))
# Проверка того, что пользователь упомянул имя пользователя чат-бота в сообщении
if '@ask_chatgptbot' in result['message']['text']:
prompt = result['message']['text'].replace("@ask_chatgptbot", "")
# Вызов OpenAI API с использованием личности бота
bot_response = openAI(f"{BOT_PERSONALITY}{prompt}")
# Отправляем ответ группе телеграмм
print(telegram_bot_sendtext(bot_response, chat_id, msg_id))
# Проверка того, что пользователь отвечает боту ChatGPT
if 'reply_to_message' in result['message']:
if result['message']['reply_to_message']['from']['is_bot']:
prompt = result['message']['text']
bot_response = openAI(f"{BOT_PERSONALITY}{prompt}")
print(telegram_bot_sendtext(bot_response, chat_id, msg_id))
except Exception as e:
print(e)
# в файл сохраняем последний id
with open(filename, 'w') as f:
f.write(last_update)
return "done"
# 5 Запускаем проверку каждые 5 секунд на наличие новых сообщений
def main():
timertime=5
Chatbot()
# 5 sec timer
threading.Timer(timertime, main).start()
# запускаем main
if __name__ == "__main__":
main()
С помощью нескольких простых шагов и небольшого количества магии Python вы успешно создали чат-бота для своей группы Telegram с помощью OpenAI. Поздравляю! Время откинуться на спинку стула и понаблюдать за поступающими весёлыми ответами. Или, знаете ли, проведите некоторую тонкую настройку, чтобы сделать вашего чат-бота действительно уникальным.
Код :
https://github.com/Develp10/telegramchatgpt/blob/main/README.md