Exemplo n.º 1
0
def register(dp: Dispatcher, bot_checker: "BotChecker"):
    def add(*args, **kwargs):
        dp.add_handler(*args, **kwargs)

    keywords_handler = ConversationHandler(
        entry_points=[
            InlineCallbackHandler(
                CallbackActions.EDIT_BOT_KEYWORDS,
                botproperties.set_keywords_init,
                serialize=lambda data: dict(to_edit=Bot.get(id=data["id"])),
                pass_chat_data=True,
            )
        ],
        states={
            BotStates.SENDING_KEYWORDS: [
                MessageHandler(Filters.text,
                               botproperties.add_keyword,
                               pass_chat_data=True),
                InlineCallbackHandler(
                    CallbackActions.REMOVE_KEYWORD,
                    botproperties.remove_keyword,
                    serialize=lambda data: dict(
                        to_edit=Bot.get(id=data["id"]),
                        keyword=Keyword.get(id=data["kwid"]),
                    ),
                    pass_chat_data=True,
                ),
                InlineCallbackHandler(
                    CallbackActions.DELETE_KEYWORD_SUGGESTION,
                    botproperties.delete_keyword_suggestion,
                    serialize=lambda data: dict(
                        to_edit=Bot.get(id=data["id"]),
                        suggestion=Suggestion.get(id=data["suggid"]),
                    ),
                    pass_chat_data=True,
                ),
            ]
        },
        fallbacks=[
            CallbackQueryHandler(
                callback_router,
                pass_chat_data=True,
                pass_user_data=True,
                pass_job_queue=True,
            )
        ],
        per_user=True,
        allow_reentry=False,
    )
    add(keywords_handler)

    broadcasting_handler = ConversationHandler(
        entry_points=[
            InlineCallbackHandler("broadcast",
                                  broadcasts.broadcast,
                                  pass_user_data=True),
            CommandHandler("broadcast",
                           broadcasts.broadcast,
                           pass_user_data=True),
            CommandHandler("bc", broadcasts.broadcast, pass_user_data=True),
        ],
        states={
            BotStates.BROADCASTING: [
                MessageHandler(Filters.text,
                               broadcasts.broadcast_preview,
                               pass_user_data=True)
            ]
        },
        fallbacks=[],
        per_user=True,
        per_chat=False,
        allow_reentry=True,
    )
    add(broadcasting_handler)

    add(
        CallbackQueryHandler(
            callback_router,
            pass_chat_data=True,
            pass_user_data=True,
            pass_job_queue=True,
        ))

    add(
        CommandHandler(("cat", "category", "categories"),
                       select_category,
                       pass_chat_data=True))
    add(
        CommandHandler(("s", "search"),
                       search_handler,
                       pass_args=True,
                       pass_chat_data=True))

    add(MessageHandler(Filters.reply, reply_router, pass_chat_data=True),
        group=-1)
    add(MessageHandler(Filters.forwarded, forward_router, pass_chat_data=True))

    add(CommandHandler("admin", admin.menu))
    add(CommandHandler("a", admin.menu))

    add(
        CommandHandler(("rej", "reject"),
                       admin.reject_bot_submission,
                       pass_args=True))
    add(
        CommandHandler(
            ("rejsil", "rejectsil", "rejsilent", "rejectsilent"),
            lambda bot, update: admin.reject_bot_submission(
                bot, update, None, notify_submittant=False),
        ))

    # admin menu
    add(RegexHandler(captions.APPROVE_BOTS + ".*", admin.approve_bots))
    add(
        RegexHandler(captions.APPROVE_SUGGESTIONS + ".*",
                     admin.approve_suggestions))
    add(RegexHandler(captions.PENDING_UPDATE + ".*", admin.pending_update))
    add(
        RegexHandler(captions.SEND_BOTLIST,
                     admin.prepare_transmission,
                     pass_chat_data=True))
    add(RegexHandler(captions.FIND_OFFLINE, admin.send_offline))
    add(RegexHandler(captions.SEND_CONFIG_FILES, admin.send_runtime_files))
    add(RegexHandler(captions.SEND_ACTIVITY_LOGS, admin.send_activity_logs))

    # main menu
    add(RegexHandler(captions.ADMIN_MENU, admin.menu))
    add(RegexHandler(captions.REFRESH, admin.menu))
    add(RegexHandler(captions.CATEGORIES, select_category,
                     pass_chat_data=True))
    add(RegexHandler(captions.EXPLORE, explore.explore, pass_chat_data=True))
    add(RegexHandler(captions.FAVORITES, favorites.send_favorites_list))
    add(RegexHandler(captions.NEW_BOTS, show_new_bots, pass_chat_data=True))
    add(RegexHandler(captions.SEARCH, search_handler, pass_chat_data=True))
    add(RegexHandler(captions.CONTRIBUTING, help.contributing))
    add(RegexHandler(captions.EXAMPLES, help.examples))
    add(RegexHandler(captions.HELP, help.help))

    add(RegexHandler("^/edit\d+$", admin.edit_bot, pass_chat_data=True),
        group=1)

    add(RegexHandler("^/approve\d+$", admin.edit_bot, pass_chat_data=True),
        group=1)
    add(CommandHandler("approve", admin.short_approve_list))

    add(CommandHandler(("manybot", "manybots"), admin.manybots))

    add(
        CommandHandler(
            "new",
            partial(contributions.new_bot_submission, bot_checker=bot_checker),
            pass_args=True,
            pass_chat_data=True,
        ))
    add(
        RegexHandler(
            ".*#new.*",
            lambda bot, update, chat_data: contributions.new_bot_submission(
                bot, update, chat_data, args=None, bot_checker=bot_checker),
            pass_chat_data=True,
        ),
        group=1,
    )
    add(
        CommandHandler("offline",
                       contributions.notify_bot_offline,
                       pass_args=True))
    add(RegexHandler(".*#offline.*", contributions.notify_bot_offline),
        group=1)
    add(CommandHandler("spam", contributions.notify_bot_spam, pass_args=True))
    add(RegexHandler(".*#spam.*", contributions.notify_bot_spam), group=1)

    add(CommandHandler("help", help.help))
    add(CommandHandler(("contribute", "contributing"), help.contributing))
    add(CommandHandler("examples", help.examples))
    add(CommandHandler("rules", help.rules))

    add(
        CommandHandler(("addfav", "addfavorite"),
                       favorites.add_favorite_handler,
                       pass_args=True))
    add(
        CommandHandler(("f", "fav", "favorites"),
                       favorites.send_favorites_list))

    add(CommandHandler(("e", "explore"), explore.explore, pass_chat_data=True))
    add(CommandHandler("official", explore.show_official))

    add(
        CommandHandler(
            "ban",
            partial(admin.ban_handler, ban_state=True),
            pass_args=True,
            pass_chat_data=True,
        ))
    add(
        CommandHandler(
            "unban",
            partial(admin.ban_handler, ban_state=False),
            pass_args=True,
            pass_chat_data=True,
        ))
    add(CommandHandler("t3chno", t3chnostats))
    add(CommandHandler("random", eastereggs.send_random_bot))
    add(
        CommandHandler("easteregg",
                       eastereggs.send_next,
                       pass_args=True,
                       pass_job_queue=True))

    add(CommandHandler("subscribe", manage_subscription))
    add(CommandHandler("newbots", show_new_bots, pass_chat_data=True))

    add(CommandHandler("accesstoken", access_token))

    add(
        CommandHandler(("stat", "stats", "statistic", "statistics"),
                       admin.send_statistic))

    add(
        CommandHandler(("log", "logs"),
                       admin.send_activity_logs,
                       pass_args=True))
    add(
        CommandHandler(
            ("debug", "analysis", "ana", "analyze"),
            lambda bot, update, args: admin.send_activity_logs(
                bot, update, args, Statistic.ANALYSIS),
            pass_args=True,
        ))
    add(
        CommandHandler(
            "info",
            lambda bot, update, args: admin.send_activity_logs(
                bot, update, args, Statistic.INFO),
            pass_args=True,
        ))
    add(
        CommandHandler(
            ("detail", "detailed"),
            lambda bot, update, args: admin.send_activity_logs(
                bot, update, args, Statistic.DETAILED),
            pass_args=True,
        ))
    add(
        CommandHandler(
            ("warn", "warning"),
            lambda bot, update, args: admin.send_activity_logs(
                bot, update, args, Statistic.WARN),
            pass_args=True,
        ))
    add(
        CommandHandler(
            "important",
            lambda bot, update, args: admin.send_activity_logs(
                bot, update, args, Statistic.IMPORTANT),
            pass_args=True,
        ))

    add(
        MessageHandler(
            Filters.text,
            lambda bot, update: botlistchat.text_message_logger(
                bot, update, log),
        ),
        group=99,
    )

    for hashtag in HINTS.keys():
        add(
            RegexHandler(r"{}.*".format(hashtag),
                         botlistchat.hint_handler,
                         pass_job_queue=True),
            group=1,
        )
    add(CommandHandler(("hint", "hints"), botlistchat.show_available_hints))

    add(
        RegexHandler(
            "^{}$".format(settings.REGEX_BOT_ONLY),
            send_bot_details,
            pass_chat_data=True,
        ))

    add(
        ChosenInlineResultHandler(inlinequeries.chosen_result,
                                  pass_chat_data=True))
    add(
        InlineQueryHandler(inlinequeries.inlinequery_handler,
                           pass_chat_data=True))
    add(MessageHandler(Filters.all, all_handler, pass_chat_data=True),
        group=98)
Exemplo n.º 2
0
def register(dp):
    keywords_handler = ConversationHandler(
        entry_points=[
            InlineCallbackHandler(
                CallbackActions.EDIT_BOT_KEYWORDS,
                botproperties.set_keywords_init,
                serialize=lambda data: dict(to_edit=Bot.get(id=data['id'])),
                pass_chat_data=True)
        ],
        states={
            BotStates.SENDING_KEYWORDS: [
                MessageHandler(Filters.text,
                               botproperties.add_keyword,
                               pass_chat_data=True),
                InlineCallbackHandler(
                    CallbackActions.REMOVE_KEYWORD,
                    botproperties.remove_keyword,
                    serialize=lambda data: dict(to_edit=Bot.get(id=data['id']),
                                                keyword=Keyword.get(id=data[
                                                    'kwid'])),
                    pass_chat_data=True)
            ],
        },
        fallbacks=[
            CallbackQueryHandler(callback_router,
                                 pass_chat_data=True,
                                 pass_user_data=True,
                                 pass_job_queue=True)
        ],
        per_user=True,
        allow_reentry=False)

    dp.add_handler(keywords_handler)

    broadcasting_handler = ConversationHandler(
        entry_points=[
            InlineCallbackHandler('broadcast',
                                  broadcasts.broadcast,
                                  pass_user_data=True),
            CommandHandler("broadcast",
                           broadcasts.broadcast,
                           pass_user_data=True),
            CommandHandler("bc", broadcasts.broadcast, pass_user_data=True)
        ],
        states={
            BotStates.BROADCASTING: [
                MessageHandler(Filters.text,
                               broadcasts.broadcast_preview,
                               pass_user_data=True),
            ],
        },
        fallbacks=[],
        per_user=True,
        per_chat=False,
        allow_reentry=True)
    dp.add_handler(broadcasting_handler)

    dp.add_handler(
        CallbackQueryHandler(callback_router,
                             pass_chat_data=True,
                             pass_user_data=True,
                             pass_job_queue=True))
    dp.add_handler(
        CommandHandler(('cat', 'category', 'categories'),
                       select_category,
                       pass_chat_data=True))
    dp.add_handler(
        CommandHandler(('s', 'search'),
                       search_handler,
                       pass_args=True,
                       pass_chat_data=True))

    dp.add_handler(MessageHandler(Filters.reply,
                                  reply_router,
                                  pass_chat_data=True),
                   group=0)
    dp.add_handler(
        MessageHandler(Filters.forwarded, forward_router, pass_chat_data=True))

    dp.add_handler(CommandHandler("admin", admin.menu))
    dp.add_handler(CommandHandler("a", admin.menu))

    # admin menu
    dp.add_handler(
        RegexHandler(captions.APPROVE_BOTS + '.*', admin.approve_bots))
    dp.add_handler(
        RegexHandler(captions.APPROVE_SUGGESTIONS + '.*',
                     admin.approve_suggestions))
    dp.add_handler(
        RegexHandler(captions.PENDING_UPDATE + '.*', admin.pending_update))
    dp.add_handler(
        RegexHandler(captions.SEND_BOTLIST,
                     admin.prepare_transmission,
                     pass_chat_data=True))
    dp.add_handler(RegexHandler(captions.FIND_OFFLINE, admin.send_offline))
    dp.add_handler(
        RegexHandler(captions.SEND_CONFIG_FILES, admin.send_runtime_files))
    dp.add_handler(
        RegexHandler(captions.SEND_ACTIVITY_LOGS, admin.send_activity_logs))

    # main menu
    dp.add_handler(RegexHandler(captions.ADMIN_MENU, admin.menu))
    dp.add_handler(RegexHandler(captions.REFRESH, admin.menu))
    dp.add_handler(
        RegexHandler(captions.CATEGORIES, select_category,
                     pass_chat_data=True))
    dp.add_handler(
        RegexHandler(captions.EXPLORE, explore.explore, pass_chat_data=True))
    dp.add_handler(
        RegexHandler(captions.FAVORITES, favorites.send_favorites_list))
    dp.add_handler(
        RegexHandler(captions.NEW_BOTS, show_new_bots, pass_chat_data=True))
    dp.add_handler(
        RegexHandler(captions.SEARCH, search_handler, pass_chat_data=True))
    dp.add_handler(RegexHandler(captions.CONTRIBUTING, help.contributing))
    dp.add_handler(RegexHandler(captions.EXAMPLES, help.examples))
    dp.add_handler(RegexHandler(captions.HELP, help.help))

    dp.add_handler(RegexHandler("^/edit\d+$",
                                admin.edit_bot,
                                pass_chat_data=True),
                   group=1)
    dp.add_handler(CommandHandler('reject', admin.reject_bot_submission))
    dp.add_handler(CommandHandler('rej', admin.reject_bot_submission))

    dp.add_handler(RegexHandler("^/approve\d+$",
                                admin.edit_bot,
                                pass_chat_data=True),
                   group=1)
    dp.add_handler(CommandHandler('approve', admin.short_approve_list))

    dp.add_handler(CommandHandler(('manybot', 'manybots'), admin.manybots))

    dp.add_handler(
        CommandHandler('new',
                       contributions.new_bot_submission,
                       pass_args=True,
                       pass_chat_data=True))
    dp.add_handler(RegexHandler('.*#new.*',
                                contributions.new_bot_submission,
                                pass_chat_data=True),
                   group=1)
    dp.add_handler(
        CommandHandler('offline',
                       contributions.notify_bot_offline,
                       pass_args=True))
    dp.add_handler(RegexHandler('.*#offline.*',
                                contributions.notify_bot_offline),
                   group=1)
    dp.add_handler(
        CommandHandler('spam', contributions.notify_bot_spam, pass_args=True))
    dp.add_handler(RegexHandler('.*#spam.*', contributions.notify_bot_spam),
                   group=1)
    dp.add_handler(
        RegexHandler('^{}$'.format(settings.REGEX_BOT_ONLY),
                     send_bot_details,
                     pass_chat_data=True))

    dp.add_handler(CommandHandler('help', help.help))
    dp.add_handler(
        CommandHandler(("contribute", "contributing"), help.contributing))
    dp.add_handler(CommandHandler("examples", help.examples))
    dp.add_handler(CommandHandler("rules", help.rules))

    dp.add_handler(
        CommandHandler(("addfav", "addfavorite"),
                       favorites.add_favorite_handler,
                       pass_args=True))
    dp.add_handler(
        CommandHandler(("f", "fav", "favorites"),
                       favorites.send_favorites_list))

    dp.add_handler(
        CommandHandler(("e", "explore"), explore.explore, pass_chat_data=True))
    dp.add_handler(CommandHandler("official", explore.show_official))

    dp.add_handler(
        CommandHandler('ban',
                       lambda bot, update, args: admin.ban_handler(
                           bot, update, args, True),
                       pass_args=True))
    dp.add_handler(
        CommandHandler('unban',
                       lambda bot, update, args: admin.ban_handler(
                           bot, update, args, False),
                       pass_args=True))
    dp.add_handler(CommandHandler('t3chno', t3chnostats))
    dp.add_handler(CommandHandler('random', eastereggs.send_random_bot))
    dp.add_handler(
        CommandHandler('easteregg', eastereggs.send_next, pass_args=True))

    dp.add_handler(CommandHandler("subscribe", manage_subscription))
    dp.add_handler(
        CommandHandler("newbots", show_new_bots, pass_chat_data=True))

    dp.add_handler(CommandHandler("accesstoken", access_token))

    dp.add_handler(
        CommandHandler(('stat', 'stats', 'statistic', 'statistics'),
                       admin.send_statistic))

    dp.add_handler(
        CommandHandler(('log', 'logs'),
                       admin.send_activity_logs,
                       pass_args=True))
    dp.add_handler(
        CommandHandler(('debug', 'analysis', 'ana', 'analyze'),
                       lambda bot, update, args: admin.send_activity_logs(
                           bot, update, args, Statistic.ANALYSIS),
                       pass_args=True))
    dp.add_handler(
        CommandHandler('info',
                       lambda bot, update, args: admin.send_activity_logs(
                           bot, update, args, Statistic.INFO),
                       pass_args=True))
    dp.add_handler(
        CommandHandler(('detail', 'detailed'),
                       lambda bot, update, args: admin.send_activity_logs(
                           bot, update, args, Statistic.DETAILED),
                       pass_args=True))
    dp.add_handler(
        CommandHandler(('warn', 'warning'),
                       lambda bot, update, args: admin.send_activity_logs(
                           bot, update, args, Statistic.WARN),
                       pass_args=True))
    dp.add_handler(
        CommandHandler('important',
                       lambda bot, update, args: admin.send_activity_logs(
                           bot, update, args, Statistic.IMPORTANT),
                       pass_args=True))

    dp.add_handler(MessageHandler(
        Filters.text,
        lambda bot, update: botlistchat.text_message_logger(bot, update, log)),
                   group=99)

    for hashtag in HINTS.keys():
        dp.add_handler(RegexHandler(r'{}.*'.format(hashtag),
                                    botlistchat.hint_handler),
                       group=1)
    dp.add_handler(
        CommandHandler(('hint', 'hints'), botlistchat.show_available_hints))

    dp.add_handler(
        ChosenInlineResultHandler(inlinequeries.chosen_result,
                                  pass_chat_data=True))
    dp.add_handler(
        InlineQueryHandler(inlinequeries.inlinequery_handler,
                           pass_chat_data=True))
    dp.add_handler(MessageHandler(Filters.all,
                                  all_handler,
                                  pass_chat_data=True),
                   group=98)