-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.py
More file actions
84 lines (62 loc) · 2.61 KB
/
run.py
File metadata and controls
84 lines (62 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import logging
import sys
from os import getenv
from dotenv import load_dotenv
from aiohttp import web
from aiogram.client.default import DefaultBotProperties
from aiogram import Bot, Dispatcher, Router
from aiogram.exceptions import TelegramUnauthorizedError
from aiogram.filters import Command, CommandObject
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.types import Message
from aiogram.webhook.aiohttp_server import (
SimpleRequestHandler,
TokenBasedRequestHandler,
setup_application,
)
from handlers.dice import router as dice_game_router
load_dotenv()
main_router = Router()
BASE_URL = getenv("NGROK_URL")
MAINBOT_TOKEN = getenv("TOKEN")
MAINBOT_PATH = f'/bot/{MAINBOT_TOKEN}'
OTHER_PATH = '/other_bots/{bot_token}'
MAINBOT_URL = f'{getenv("NGROK_URL")}/bot/{getenv("TOKEN")}'
OTHER_URL = f'{BASE_URL}{OTHER_PATH}'
WEBHOOK_HOST = f'{getenv("HOST")}'
WEBHOOK_PORT = f'{getenv("PORT")}'
@main_router.message(Command('start'))
async def start(message:Message):
await message.answer('Отправь мне комманду /add вместе с токеном бота, и я его добавлю')
@main_router.message(Command("add"))
async def command_add_bot(message: Message, command: CommandObject):
try:
new_bot = Bot(token=command.args, default=DefaultBotProperties(parse_mode='HTML'))
bot_user = await new_bot.get_me()
except TelegramUnauthorizedError:
return await message.answer("Неверный токен")
await new_bot.delete_webhook(drop_pending_updates=True)
await new_bot.set_webhook(OTHER_URL.format(bot_token=command.args))
return await message.answer(f"Бот @{bot_user.username} теперь работает!")
async def on_startup(bot: Bot):
await bot.delete_webhook(drop_pending_updates=True)
await bot.set_webhook(url=MAINBOT_URL)
def main():
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
dp.include_router(main_router)
dp.startup.register(on_startup)
app = web.Application()
bot = Bot(token=MAINBOT_TOKEN, default=DefaultBotProperties(parse_mode='HTML'))
webhook = SimpleRequestHandler(dispatcher=dp,bot=bot)
webhook.register(app,path=MAINBOT_PATH)
other_dp = Dispatcher(storage=storage)
other_dp.include_router(dice_game_router)
other_webhook = TokenBasedRequestHandler(dispatcher=other_dp)
other_webhook.register(app, path=OTHER_PATH)
setup_application(app,dp,bot=bot)
setup_application(app,other_dp)
web.run_app(app,host=WEBHOOK_HOST,port=int(WEBHOOK_PORT))
if __name__ == "__main__":
main()