Необходимо получать команды от пользователя, а также получать информацию о том в какой чат добавили/удалили бота. Хороший способ получать сообщения от пользователя это использовать CommandHandlers. Такой код работает правильно:
import telegram, config
from telegram.ext import Updater, CommandHandler, Filters, MessageHandler
bot = telegram.Bot(config.TOKEN)
def help(bot, update):
update.message.reply_text('...')
def start(bot, update):
update.message.reply_text('...')
def about(bot, update):
update.message.reply_text('...')
if __name__ == '__main__':
updater = Updater(config.TOKEN)
updater.start_webhook(listen='0.0.0.0',
port=config.PORT,
url_path=config.TOKEN,
key=config.CERT_KEY,
cert=config.CERT,
webhook_url='https://{}:{}/{}'.format(config.HOST, config.PORT, config.TOKEN))
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("help", help))
dp.add_handler(CommandHandler("about", about))
Получать сообщения о добавлении/удалении бота в чаты можно, используя Flask's route и telegram.update.Update.de_json():
from flask import Flask, request
import telegram, config
bot = telegram.Bot(config.TOKEN)
app = Flask(__name__)
context = (config.CERT, config.CERT_KEY)
@app.route('/' + config.TOKEN, methods=['POST'])
def webhook():
update = telegram.update.Update.de_json(request.get_json(force=True), bot)
# Из update можно получить инфу о добавлении или удалении бота из чата
print(update)
return 'OK'
def setWebhook():
bot.setWebhook(webhook_url='https://%s:%s/%s' % (config.HOST, config.PORT, config.TOKEN),
certificate=open(config.CERT, 'rb'))
if __name__ == '__main__':
setWebhook()
app.run(host='0.0.0.0',
port=config.PORT,
ssl_context=context,
debug=True)
Можно ли получать сообщения о добавлении/удалении бота в чаты не используя? Если да, то как?
Если использовать одновременно CommandHandlers и Flask's routes, то CommandHandlers перестают работать, видимо потому, что @app.route перехватывает такие сообщения:
from flask import Flask, request
import telegram, config, time, datetime
from telegram.ext import Updater, CommandHandler, Filters, MessageHandler
bot = telegram.Bot(config.TOKEN)
app = Flask(__name__)
context = (config.CERT, config.CERT_KEY)
# Commands
def help(bot, update):
update.message.reply_text('...')
def start(bot, update):
update.message.reply_text('...')
def about(bot, update):
update.message.reply_text('...')
@app.route('/' + config.TOKEN, methods=['POST'])
def webhook():
update = telegram.update.Update.de_json(request.get_json(force=True), bot)
print(update)
return 'OK'
def setWebhook():
bot.setWebhook(webhook_url='https://%s:%s/%s' % (config.HOST, config.PORT, config.TOKEN),
certificate=open(config.CERT, 'rb'))
if __name__ == '__main__':
updater = Updater(config.TOKEN)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("help", help))
dp.add_handler(CommandHandler("about", about))
setWebhook()
app.run(host='0.0.0.0',
port=config.PORT,
ssl_context=context,
debug=True)
1. Можно ли получать сообщения о добавлении/удалении бота в чаты не используя? Если да, то как?
2. Как сделать чтобы команды от пользователя не перехватывались @app.route?
3. Существуют ли другие способы получать сообщения о добавлении/удалении бота из/в чаты и удобной обработки команд от пользователя?