コード例 #1
0
ファイル: tgbot.py プロジェクト: faxport/telegram-bot
def main():
    # Create the Updater and pass it your bot's token.
    token = env.must_get('TELEGRAM_BOT_TOKEN')
    # Initial updater
    # NOTE: Perfomance optimization, see https://github.com/python-telegram-bot/python-telegram-bot/wiki/Performance-Optimizations
    updater = Updater(token, request_kwargs={'read_timeout': 6, 'connect_timeout': 7})

    # Get the dispatcher to register handlers
    dp = updater.dispatcher

    # on different commands - answer in Telegram
    dp.add_handler(CommandHandler("start", run_async(start)))
    dp.add_handler(CommandHandler("help", run_async(help)))
    dp.add_handler(CommandHandler("echo", run_async(echo)))
    dp.add_handler(CommandHandler("chatid", run_async(chat_id)))
    dp.add_handler(MessageHandler(Filters.status_update.new_chat_members, run_async(kick_user)))

    # log all errors
    dp.add_error_handler(error)

    # Start the Bot
    updater.start_polling()

    # Block until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT. This should be used most of the time, since
    # start_polling() is non-blocking and will stop the bot gracefully.
    updater.idle()
コード例 #2
0
    def test_run_async_with_args(self, dp):
        dp.add_handler(MessageHandler(Filters.all,
                                      run_async(self.callback_if_not_update_queue),
                                      pass_update_queue=True))

        dp.update_queue.put(self.message_update)
        sleep(.1)
        assert self.received == self.message_update.message
コード例 #3
0
    def test_run_async_with_args(self, dp):
        dp.add_handler(MessageHandler(Filters.all,
                                      run_async(self.callback_if_not_update_queue),
                                      pass_update_queue=True))

        dp.update_queue.put(self.message_update)
        sleep(.1)
        assert self.received == self.message_update.message
コード例 #4
0
def main():
    print("\nrunning...")
    # define the updater
    updater = Updater(token=config.BOT_TOKEN, workers=7)

    # define the dispatcher
    dp = updater.dispatcher

    # define jobs
    j = updater.job_queue

    # this will run async the process_update
    dp.process_update = run_async(dp.process_update)

    # handlers

    # first start
    dp.add_handler(
        CommandHandler('start', commands.first_start, filters=Filters.private),
        -2)

    # before processing
    dp.add_handler(MessageHandler(Filters.all, messages.before_processing), -1)

    # commands
    dp.add_handler(CommandHandler('settings', commands.settings))
    dp.add_handler(CommandHandler('vote', commands.vote, pass_args=True))
    dp.add_handler(CommandHandler('start', commands.start, pass_args=True))
    dp.add_handler(CommandHandler('help', commands.help))
    dp.add_handler(
        CommandHandler(
            'groupleaderboard',
            commands.groupleaderboard_private,
            filters=Filters.private,
            pass_args=True))  # this should come before the one for groups
    dp.add_handler(
        CommandHandler('groupleaderboard',
                       commands.groupleaderboard,
                       pass_args=True))
    dp.add_handler(
        CommandHandler(
            'grouprank',
            commands.group_rank_private,
            filters=Filters.private,
            pass_args=True))  # this should come before the one for groups
    dp.add_handler(CommandHandler('grouprank', commands.group_rank))
    dp.add_handler(CommandHandler('leaderboard', commands.leaderboard))
    dp.add_handler(
        CommandHandler('leadervote', leaderboards.leadervote, pass_args=True))
    dp.add_handler(
        CommandHandler('leadermessage',
                       leaderboards.leadermessage,
                       pass_args=True))
    dp.add_handler(
        CommandHandler('leadermember',
                       leaderboards.leadermember,
                       pass_args=True))
    dp.add_handler(CommandHandler('aboutyou', commands.aboutyou))
    dp.add_handler(CommandHandler('language', commands.language))
    dp.add_handler(CommandHandler('region', commands.region))
    dp.add_handler(CommandHandler('feedback', commands.feedback))
    # private commands
    dp.add_handler(CommandHandler('statsusers', commands_private.stats_users))
    dp.add_handler(CommandHandler('statsgroups',
                                  commands_private.stats_groups))
    dp.add_handler(
        CommandHandler('infoid', commands_private.infoid, pass_args=True))
    dp.add_handler(
        CommandHandler('reverseusername',
                       commands_private.reverse_username,
                       pass_args=True))
    dp.add_handler(
        CommandHandler('bangroup', commands_private.ban_group, pass_args=True))
    dp.add_handler(
        CommandHandler('unbangroup',
                       commands_private.unban_group,
                       pass_args=True))
    # invalid command
    dp.add_handler(
        MessageHandler(Filters.command & Filters.private,
                       utils.invalid_command))
    # handle all messages not command. it's obvious because commands are handled before,
    # but it's more safe
    dp.add_handler(MessageHandler(~Filters.command, messages.processing))

    # handle buttons callback
    dp.add_handler(CallbackQueryHandler(buttons_callback.callback_query))

    # jobs
    j.run_repeating(cleandb.clean_db, interval=60 * 60 * 24, first=0)
    j.run_repeating(memberslog.members_log, interval=60 * 60 * 24, first=0)
    j.run_daily(digest_private.weekly_own_private,
                time=datetime.time(0, 0, 0),
                days=(0, ))
    j.run_daily(digest_supergroups.weekly_groups_digest,
                time=datetime.time(0, 0, 0),
                days=(0, ))
    # leaderboards pre-cache

    j.run_repeating(leaderboards.scheduling_votes_leaderboard_cache,
                    interval=leaderboards.VotesLeaderboard.CACHE_SECONDS,
                    first=0)
    j.run_repeating(leaderboards.scheduling_messages_leaderboard_cache,
                    interval=leaderboards.MessagesLeaderboard.CACHE_SECONDS,
                    first=0)
    j.run_repeating(leaderboards.scheduling_members_leaderboard_cache,
                    interval=leaderboards.MembersLeaderboard.CACHE_SECONDS,
                    first=0)
    # pre-cached users stats
    j.run_repeating(cache_users_stats.cache_users_stats,
                    interval=cache_users_stats.CACHE_SECONDS,
                    first=0)

    # pre-cache ranks groups
    j.run_repeating(cache_groups_rank.caching_ranks,
                    interval=cache_groups_rank.CACHE_SECONDS,
                    first=0)

    # check inactive groups
    j.run_repeating(cleandb.check_bot_inside_in_inactive_groups,
                    interval=(60 * 60 * 24) * 2,
                    first=0)

    # update cache if the week is over for cached leaderboards related to the week
    j.run_daily(leaderboards.scheduling_messages_leaderboard_cache,
                time=datetime.time(0, 0, 0),
                days=(0, ))
    j.run_daily(cache_users_stats.cache_users_stats,
                time=datetime.time(0, 0, 0),
                days=(0, ))
    j.run_daily(cache_groups_rank.caching_ranks,
                time=datetime.time(0, 0, 0),
                days=(0, ))
    # handle errors
    dp.add_error_handler(error)

    updater.start_polling()
    updater.idle()