Skip to content

Instantly share code, notes, and snippets.

@fabiovila
Created April 8, 2023 18:40
Show Gist options
  • Save fabiovila/af1c988ae1eab319f2e9cf2a5adecc55 to your computer and use it in GitHub Desktop.
Save fabiovila/af1c988ae1eab319f2e9cf2a5adecc55 to your computer and use it in GitHub Desktop.
OpenAI Bot for Telegram, also example of Flask and webhook pure requests bot for telegram, redis is used as update_id cache.
from flask import Flask, request, jsonify
import requests
from .bot import get_completion
import logging, sys
import redis
logging.basicConfig(stream=sys.stderr,level=logging.DEBUG, format="[FLASK] %(message)s")
app = Flask(__name__)
app.debug = True
TELEGRAM_URL = "https://api.telegram.org/"
# -- CONFIGS
# token provided by BotFather
TOKEN = "bot" + "YOUR_TOKEN_HERE" + "/"
# your https server url example: ""https://www.mayserver.com/"" or ""https://www.mayserver.com/telegram/""
SERVER_URL = "https://www.mayserver.com/telegram/"
# allowed chats id, other chats are ignored. Integer format
TELEGRAM_CHAT_ID= [-1001217684771]
def sendMessage(chat_id, text, reply_id):
payload = {
'chat_id':chat_id,
'text':text,
'reply_to_message_id': reply_id,
}
session = requests.Session()
req = requests.post(TELEGRAM_URL+TOKEN+"sendMessage",data=payload)
print (req)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.json and 'message' in request.json:
j = request.json
message = j['message']
chat_id = message['chat']['id']
update_id = j['update_id']
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
if r.get(update_id) == b'1':
return "ok"
else:
r.set(update_id,1,ex=432000)
for ci in TELEGRAM_CHAT_ID:
if chat_id == ci and 'text' in message:
userid = message['from']['id']
username = message['from'].get('username',message['from'].get('first_name',''))
text = message['text']
message_id = message['message_id']
answer, message_response = arissa.get_completion(text,username)
if answer:
sendMessage(chat_id,message_response,message_id)
break
return "ok"
@app.route('/set', methods=['GET', 'POST'])
def sethook():
r = requests.get(TELEGRAM_URL+TOKEN+"setWebhook?url="+SERVER_URL)
return jsonify(r.json())
@app.route('/del', methods=['GET', 'POST'])
def delhook():
r = requests.get(TELEGRAM_URL+TOKEN+'deleteWebhook?url='+SERVER_URL)
return jsonify(r.json())
# Open SERVER_URL/refresh in order to set webhook while in dev stage
@app.route('/refresh', methods=['GET', 'POST'])
def refreshhook():
r = requests.get(TELEGRAM_URL+TOKEN+'deleteWebhook?url='+SERVER_URL)
r = requests.get(TELEGRAM_URL+TOKEN+"setWebhook?url="+SERVER_URL)
return jsonify(r.json())
if __name__ == "__main__":
r = requests.get(TELEGRAM_URL+TOKEN+'deleteWebhook?url='+SERVER_URL)
r = requests.get(TELEGRAM_URL+TOKEN+"setWebhook?url="+SERVER_URL)
app.run()
import openai
MENTION_TRIGGER=['botname','@botname']
PROMPT = 'user @{} in Telegram: "{}".'
def get_completion (txt: str, user: str):
answer = False
original_response = ''
for m in MENTION_TRIGGER:
if m in txt.lower():
answer = True
break
if answer:
prompt = PROMPT.format(user,txt)
openai.api_key = "YOUR_KEY_HERE"
message = [{"role": "user", "content": prompt}]
chat_completion = openai.ChatCompletion.create(model='gpt-3.5-turbo', messages=message, max_tokens=1024)
original_response = chat_completion['choices'][0]['message']['content']
return answer, original_response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment