2018-07-18 01:21:50 +03:00
|
|
|
import logging
|
2020-05-31 20:50:18 +03:00
|
|
|
import ssl
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
from aiogram import Bot, types
|
2019-08-11 22:52:54 +03:00
|
|
|
from aiogram.contrib.middlewares.logging import LoggingMiddleware
|
2018-07-18 01:21:50 +03:00
|
|
|
from aiogram.dispatcher import Dispatcher
|
2019-08-11 22:52:54 +03:00
|
|
|
from aiogram.dispatcher.webhook import SendMessage
|
2018-07-18 01:21:50 +03:00
|
|
|
from aiogram.utils.executor import start_webhook
|
|
|
|
|
|
2019-08-11 22:52:54 +03:00
|
|
|
|
2020-05-31 20:50:18 +03:00
|
|
|
API_TOKEN = 'Your bot token'
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
# webserver settings
|
2020-05-31 20:50:18 +03:00
|
|
|
WEBAPP_HOST = 'localhost' # or 0.0.0.0
|
2020-05-31 22:23:40 +03:00
|
|
|
WEBAPP_PORT = 88
|
2020-05-31 20:50:18 +03:00
|
|
|
|
|
|
|
|
# SSL settings
|
|
|
|
|
WEBHOOK_SSL_CERT = 'path_to_cert.pem'
|
|
|
|
|
WEBHOOK_SSL_PRIV = 'path_to_private.key'
|
|
|
|
|
|
|
|
|
|
# webhook settings
|
|
|
|
|
WEBHOOK_HOST = 'XX.XX.XX.XX' # IP your host
|
2020-05-31 22:23:40 +03:00
|
|
|
WEBHOOK_PORT = 88 # Ports currently supported for Webhooks: 443, 80, 88, 8443
|
2020-05-31 20:50:18 +03:00
|
|
|
WEBHOOK_PATH = '/bot'
|
2020-05-31 22:23:40 +03:00
|
|
|
WEBHOOK_URL = f'{WEBHOOK_HOST}:{WEBHOOK_PORT}{WEBHOOK_PATH}'
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
|
|
2019-07-15 14:00:38 +07:00
|
|
|
bot = Bot(token=API_TOKEN)
|
2018-07-18 01:21:50 +03:00
|
|
|
dp = Dispatcher(bot)
|
2019-08-11 22:52:54 +03:00
|
|
|
dp.middleware.setup(LoggingMiddleware())
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@dp.message_handler()
|
|
|
|
|
async def echo(message: types.Message):
|
2019-08-11 22:52:54 +03:00
|
|
|
# Regular request
|
|
|
|
|
# await bot.send_message(message.chat.id, message.text)
|
|
|
|
|
|
|
|
|
|
# or reply INTO webhook
|
|
|
|
|
return SendMessage(message.chat.id, message.text)
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
async def on_startup(dp):
|
2020-05-31 20:50:18 +03:00
|
|
|
logging.warning('Webhook startup..')
|
|
|
|
|
|
|
|
|
|
# Check webhook
|
|
|
|
|
webhook = await bot.get_webhook_info()
|
|
|
|
|
|
|
|
|
|
# If webhook URL doesnt match current - remove webhook
|
|
|
|
|
if webhook.url != WEBHOOK_URL:
|
|
|
|
|
await bot.delete_webhook()
|
|
|
|
|
|
|
|
|
|
# Set webhook
|
|
|
|
|
await bot.set_webhook(WEBHOOK_URL, certificate=open(WEBHOOK_SSL_CERT, 'rb').read())
|
2018-07-18 01:21:50 +03:00
|
|
|
# insert code here to run it after start
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def on_shutdown(dp):
|
2019-08-11 22:52:54 +03:00
|
|
|
logging.warning('Shutting down..')
|
2020-05-31 20:50:18 +03:00
|
|
|
await bot.close()
|
2018-07-18 01:21:50 +03:00
|
|
|
# insert code here to run it before shutdown
|
2019-08-11 22:52:54 +03:00
|
|
|
|
|
|
|
|
# Close DB connection (if used)
|
|
|
|
|
await dp.storage.close()
|
|
|
|
|
await dp.storage.wait_closed()
|
|
|
|
|
|
|
|
|
|
logging.warning('Bye!')
|
2018-07-18 01:21:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2020-05-31 20:50:18 +03:00
|
|
|
|
|
|
|
|
# Generate SSL context.
|
|
|
|
|
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
|
|
|
|
context.load_cert_chain(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV)
|
|
|
|
|
|
2019-08-11 22:52:54 +03:00
|
|
|
start_webhook(
|
|
|
|
|
dispatcher=dp,
|
|
|
|
|
webhook_path=WEBHOOK_PATH,
|
|
|
|
|
on_startup=on_startup,
|
|
|
|
|
on_shutdown=on_shutdown,
|
|
|
|
|
skip_updates=True,
|
|
|
|
|
host=WEBAPP_HOST,
|
|
|
|
|
port=WEBAPP_PORT,
|
2020-05-31 20:50:18 +03:00
|
|
|
ssl_context=context
|
2019-08-11 22:52:54 +03:00
|
|
|
)
|