async def main(): logger.error('Starting bot') config = load_config('bot.ini') if config.tg_bot.use_redis: storage = RedisStorage() else: storage = MemoryStorage() loop = asyncio.get_event_loop() pool = await create_pool( user=config.db.user, password=config.db.password, database=config.db.database, host=config.db.host, loop=loop, ) bot = Bot(token=config.tg_bot.token) dp = Dispatcher(bot, storage=storage) dp.middleware.setup(DbMiddleware(pool)) dp.middleware.setup(RoleMiddleware(config.tg_bot.admin_id)) dp.filters_factory.bind(RoleFilter) dp.filters_factory.bind(AdminFilter) register_admin(dp) register_user(dp) # start try: await dp.start_polling() finally: await bot.close()
async def main(): logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", ) logger.error("Starting bot") config = load_config("bot.ini") if config.tg_bot.use_redis: storage = RedisStorage() else: storage = MemoryStorage() pool = await create_pool( user=config.db.user, password=config.db.password, database=config.db.database, host=config.db.host, echo=False, ) bot = Bot(token=config.tg_bot.token) dp = Dispatcher(bot, storage=storage) dp.middleware.setup(DbMiddleware(pool)) dp.middleware.setup(RoleMiddleware(config.tg_bot.admin_id)) dp.filters_factory.bind(RoleFilter) dp.filters_factory.bind(AdminFilter) register_admin(dp) register_user(dp) # start try: await dp.start_polling() finally: await bot.close()
async def main(): logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", ) logging.getLogger("aiogram_dialog").setLevel(logging.DEBUG) logger.info("Starting bot") config = load_config("bot.ini") if config.tg_bot.use_redis: storage = RedisStorage2() else: storage = MemoryStorage() pool = await create_pool(user=config.db.user, password=config.db.password, database=config.db.database, host=config.db.host) bot = Bot(token=config.tg_bot.token, parse_mode='html') dp = Dispatcher(bot, storage=storage) # aiogram_dialog logging.getLogger("aiogram_dialog").setLevel(logging.DEBUG) registry = DialogRegistry(dp) registry.register(broadcast) dp.middleware.setup(ThrottlingMiddleware(limit=.5)) dp.middleware.setup(DbMiddleware(pool)) dp.middleware.setup(RoleMiddleware()) dp.middleware.setup(SupportMiddleware(Dispatcher=dp)) dp.filters_factory.bind(RoleFilter) dp.filters_factory.bind(AdminFilter) register_admin(dp) register_manager(dp) register_courier(dp) register_customer(dp) register_group(dp) # register apscheduler @TODO запустить статистику # scheduler = AsyncIOScheduler(timezone='Europe/Moscow') # scheduler.start() # scheduler.add_job(send_stats, 'cron', args=(bot, True, repository.Repo(pool)), hour=23, minute=0, # replace_existing=True) # Day stats # scheduler.add_job(send_stats, 'cron', args=(bot, True, repository.Repo(pool)), day_of_week='Sun', hour=23, minute=0, # replace_existing=True) # week stats # start try: await dp.start_polling() finally: await bot.close()
from telegram import Bot from telegram import Update from telegram.ext import CallbackContext from telegram.ext import CommandHandler from telegram.ext import MessageHandler from telegram.ext import Filters from telegram.ext import Updater from telegram.utils.request import Request from tgbot.utils import logger_factory from tgbot.config import load_config from tgbot.models import Profile, Message from tgbot.calculations import categories, children config = load_config() logger = getLogger(__name__) debug_requests = logger_factory(logger=logger) @debug_requests def do_start(update: Update, context: CallbackContext): chat_id = update.message.chat_id p, _ = Profile.objects.get_or_create(external_id=chat_id, defaults={ 'name': update.message.from_user.username, })
async def send_stats(bot: Bot, day: bool, repo: Repo): # @TODO рассылка всем партнерам config = load_config("bot.ini") for partner in await repo.get_partners(with_main=True): if day: orders = await repo.get_orders_count(city=partner['city'], date_range="day") if len(orders) > 0: day_count = orders[0]['count'] couriers_stats = {} for order in orders: if order['courierid'] is not None: if order['courierid'] in couriers_stats: couriers_stats[order['courierid']] += 1 else: couriers_stats[order['courierid']] = 1 if len(couriers_stats) > 0: sorted(couriers_stats.items(), key=lambda x: x[1], reverse=True) first_courier_from_list = next(iter(couriers_stats)) courier_of_the_day = await repo.get_courier( userid=first_courier_from_list) courier_of_the_day = f"{courier_of_the_day['name']}\n<b>№{courier_of_the_day['id']}</b>" message_to_send = f"""<b>Подведем итоги дня!</b> 📦 Всего заказов за день: <b>{day_count}</b> Курьер дня: <b>{courier_of_the_day}</b> Статистика курьеров: """ i = 1 for courier in couriers_stats: courier_data = await repo.get_courier(userid=courier) message_to_send += f"{i}. {courier_data['name']} (№{courier_data['id']}) - {couriers_stats[courier]}\n" i += 1 else: message_to_send = f"""<b>Подведем итоги дня!</b> 📦 Всего заказов за день: <b>{day_count}</b> <code>Нет статистики по курьерам</code>""" else: message_to_send = f"""<b>Подведем итоги дня!</b> 📦 Всего заказов за день: Заказов не было""" await bot.send_message(chat_id=config.tg_bot.orders_group, text=message_to_send) else: orders = await repo.get_orders_count(city=partner['city'], date_range="week") if len(orders) > 0: day_count = orders[0]['count'] couriers_stats = {} for order in orders: if order['courierid'] is not None: if order['courierid'] in couriers_stats: couriers_stats[order['courierid']] += 1 else: couriers_stats[order['courierid']] = 1 if len(couriers_stats) > 0: sorted(couriers_stats.items(), key=lambda x: x[1], reverse=True) first_courier_from_list = next(iter(couriers_stats)) courier_of_the_week = await repo.get_courier( userid=first_courier_from_list) courier_of_the_week = f"{courier_of_the_week['name']}\n<b>№{courier_of_the_week['id']}</b>" message_to_send = f"""<b>Подведем итоги недели!</b> 📦 Всего заказов за неделю: <b>{day_count}</b> Курьер недели: <b>{courier_of_the_week}</b> Статистика курьеров: """ i = 1 for courier in couriers_stats: courier_data = await repo.get_courier(userid=courier) message_to_send += f"{i}. {courier_data['name']} (№{courier_data['id']}) - {couriers_stats[courier]}\n" i += 1 else: message_to_send = f"""<b>Подведем итоги недели!</b> 📦 Всего заказов за неделю: <b>{day_count}</b> <i>Нет статистики по курьерам</i>""" else: message_to_send = f"""<b>Подведем итоги недели!</b> 📦 Всего заказов за неделю: Заказов не было""" await bot.send_message(chat_id=config.tg_bot.orders_group, text=message_to_send)