Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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)