forked from eternnoir/pyTelegramBotAPI
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
00998ac
commit df8f34e
Showing
1 changed file
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | ||
|
||
# This is a simple echo bot using decorators and webhook with fastapi | ||
# It echoes any incoming text messages and does not use the polling method. | ||
|
||
import logging | ||
import fastapi | ||
import telebot | ||
|
||
API_TOKEN = 'TOKEN' | ||
|
||
WEBHOOK_HOST = '<ip/domain>' | ||
WEBHOOK_PORT = 8443 # 443, 80, 88 or 8443 (port need to be 'open') | ||
WEBHOOK_LISTEN = '0.0.0.0' # In some VPS you may need to put here the IP addr | ||
|
||
WEBHOOK_SSL_CERT = './webhook_cert.pem' # Path to the ssl certificate | ||
WEBHOOK_SSL_PRIV = './webhook_pkey.pem' # Path to the ssl private key | ||
|
||
# Quick'n'dirty SSL certificate generation: | ||
# | ||
# openssl genrsa -out webhook_pkey.pem 2048 | ||
# openssl req -new -x509 -days 3650 -key webhook_pkey.pem -out webhook_cert.pem | ||
# | ||
# When asked for "Common Name (e.g. server FQDN or YOUR name)" you should reply | ||
# with the same value in you put in WEBHOOK_HOST | ||
|
||
WEBHOOK_URL_BASE = "https://{}:{}".format(WEBHOOK_HOST, WEBHOOK_PORT) | ||
WEBHOOK_URL_PATH = "/{}/".format(API_TOKEN) | ||
|
||
logger = telebot.logger | ||
telebot.logger.setLevel(logging.INFO) | ||
|
||
bot = telebot.TeleBot(API_TOKEN) | ||
|
||
app = fastapi.FastAPI() | ||
|
||
|
||
# Process webhook calls | ||
@app.post(f'/{API_TOKEN}/') | ||
def process_webhook(update: dict): | ||
if update: | ||
update = telebot.types.Update.de_json(update) | ||
bot.process_new_updates([update]) | ||
else: | ||
return | ||
|
||
|
||
|
||
# Handle '/start' and '/help' | ||
@bot.message_handler(commands=['help', 'start']) | ||
def send_welcome(message): | ||
bot.reply_to(message, | ||
("Hi there, I am EchoBot.\n" | ||
"I am here to echo your kind words back to you.")) | ||
|
||
|
||
# Handle all other messages | ||
@bot.message_handler(func=lambda message: True, content_types=['text']) | ||
def echo_message(message): | ||
bot.reply_to(message, message.text) | ||
|
||
|
||
# Remove webhook, it fails sometimes the set if there is a previous webhook | ||
bot.remove_webhook() | ||
|
||
# Set webhook | ||
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH, | ||
certificate=open(WEBHOOK_SSL_CERT, 'r')) | ||
|
||
|
||
import uvicorn | ||
uvicorn.run( | ||
app, | ||
host=WEBHOOK_LISTEN, | ||
port=WEBHOOK_PORT, | ||
ssl_certfile=WEBHOOK_SSL_CERT, | ||
ssl_keyfile=WEBHOOK_SSL_PRIV | ||
) |