コード例 #1
0
    def test_pass_job_or_update_queue(self, dp, chosen_inline_result):
        handler = ChosenInlineResultHandler(self.callback_queue_1, pass_job_queue=True)
        dp.add_handler(handler)

        dp.process_update(chosen_inline_result)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = ChosenInlineResultHandler(self.callback_queue_1, pass_update_queue=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(chosen_inline_result)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = ChosenInlineResultHandler(self.callback_queue_2,
                                            pass_job_queue=True,
                                            pass_update_queue=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(chosen_inline_result)
        assert self.test_flag
コード例 #2
0
ファイル: run.py プロジェクト: Kwentar/Noteton
def main():
    config = {
        'handlers': [
            {
                'sink': sys.stdout,
                'level': 'INFO'
            },
            {
                'sink': 'logs/logs.log',
                'serialize': False,
                'level': 'DEBUG'
            },
        ],
    }
    logger.configure(**config)
    logger.info('Bot has started')
    NotetonUsersManager.init_instance()

    updater = Updater(token, use_context=True)
    dp = updater.dispatcher

    updater.logger = logger
    dp.logger = logger
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("create_list", create_list))
    dp.add_handler(CommandHandler("my_lists", my_lists))
    dp.add_handler(CommandHandler("info_and_help", info_and_help))
    dp.add_handler(CommandHandler("send_feedback", feedback))
    dp.add_handler(CommandHandler("stat", get_stat))
    dp.add_handler(CommandHandler("help", info_and_help))

    dp.add_handler(InlineQueryHandler(inline_query))
    dp.add_handler(ChosenInlineResultHandler(chosen_inline_result_handler))
    dp.add_handler(CallbackQueryHandler(callback_query_handler))

    dp.add_handler(MessageHandler(Filters.text, message_handler))
    dp.add_handler(MessageHandler(Filters.photo, photo_handler))
    dp.add_handler(MessageHandler(Filters.sticker, sticker_handler))
    dp.add_handler(MessageHandler(Filters.animation, gif_handler))
    dp.add_handler(MessageHandler(Filters.audio, audio_handler))
    dp.add_handler(MessageHandler(Filters.document, document_handler))
    dp.add_handler(MessageHandler(Filters.all, test_handler))

    updater.start_polling()
    updater.idle()
コード例 #3
0
def set_handlers(dp):
    add_handler = ConversationHandler(
        entry_points=[
            MessageHandler(VideoFilter(), video_msg, pass_user_data=True)
        ],
        states={
            CAPTION:
            [MessageHandler(Filters.text, caption_msg, pass_user_data=True)]
        },
        fallbacks=[CommandHandler('cancel', cancel)])

    dp.add_handler(add_handler)
    dp.add_handler(CommandHandler('start', start))
    dp.add_handler(CommandHandler('help', help))
    dp.add_handler(ChosenInlineResultHandler(inline_result))
    dp.add_handler(InlineQueryHandler(inline_query))
    dp.add_handler(MessageHandler(Filters.all, other_msg))
    dp.add_error_handler(error)
コード例 #4
0
def main():
    # Create the Updater and pass it your bot's token.
    updater = Updater(os.getenv('TELEGRAM_TOKEN'))

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

    # on noncommand i.e message - echo the message on Telegram
    dp.add_handler(InlineQueryHandler(inlinequery))
    dp.add_handler(ChosenInlineResultHandler(appendimage))

    # 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()
コード例 #5
0
def main():
    updater = Updater(config.TOKEN)

    dp = updater.dispatcher

    dp.add_handler(handlers.conversation)
    dp.add_handler(MessageHandler(is_in_database, handlers.meme))
    dp.add_handler(CommandHandler('name', handlers.name))
    dp.add_handler(CommandHandler('delete', handlers.delete))
    dp.add_handler(CommandHandler('rename', handlers.rename, pass_args=True))
    dp.add_handler(CommandHandler('fix', handlers.fix))
    dp.add_handler(CommandHandler('my', handlers.my))
    dp.add_handler(CommandHandler(['start', 'help'], handlers.help_))
    dp.add_handler(RegexHandler('/(?P<id>\d+)', handlers.get_by_id, pass_groupdict=True))
    dp.add_handler(InlineQueryHandler(handlers.inlinequery))
    dp.add_handler(ChosenInlineResultHandler(handlers.chosen_inline_result))

    dp.add_error_handler(error_handler)

    updater.start_polling()
    updater.idle()
コード例 #6
0
def main():
    logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        level=logging.INFO)
    print('bot start')
    updater.dispatcher.add_handler(
        CommandHandler('mmsi', vesselinfo, None, False, True))
    updater.dispatcher.add_handler(
        CommandHandler('globallastposdate',
                       globallastposdate,
                       None,
                       False,
                       pass_args=True))
    updater.dispatcher.add_handler(InlineQueryHandler(inlinequery))
    updater.dispatcher.add_handler(
        ChosenInlineResultHandler(process_chosen,
                                  pass_user_data=True,
                                  pass_chat_data=True,
                                  pass_update_queue=True))
    updater.start_polling()
    updater.idle()
コード例 #7
0
ファイル: spoilerobot.py プロジェクト: rebel6969/spoilerobot
def main():
    users = defaultdict(User)
    updater = Updater(BOT_TOKEN)

    dp = updater.dispatcher

    dp.add_handler(InlineQueryHandler(on_inline))
    dp.add_handler(ChosenInlineResultHandler(on_inline_chosen))
    dp.add_handler(
        CallbackQueryHandler(
            lambda bot, update: on_callback_query(bot, update, users)))

    dp.add_handler(
        CommandHandler(
            'start',
            lambda bot, update, args: cmd_start(bot, update, args, users),
            pass_args=True))
    dp.add_handler(
        CommandHandler('cancel',
                       lambda bot, update: cmd_cancel(bot, update, users)))
    dp.add_handler(CommandHandler('clear', cmd_clear))
    dp.add_handler(CommandHandler('help', cmd_help))
    dp.add_handler(CommandHandler('unban', cmd_unban, pass_args=True))

    dp.add_handler(
        MessageHandler(Filters.all,
                       lambda bot, update: on_message(bot, update, users)))

    dp.add_error_handler(error)

    j = updater.job_queue
    j.run_repeating(lambda bot, job: database.store_request_count(),
                    interval=5,
                    first=0)
    j.run_repeating(job_forget_old_owners, interval=60, first=0)

    updater.start_polling()
    updater.idle()
コード例 #8
0
def main():
    global popularity
    logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        level=logging.INFO,
    )

    # load popularity numbers from disk
    if popularity_filename:
        try:
            with open(popularity_filename, "r") as popularity_data:
                popularity = json.load(popularity_data)
            logging.info(
                f"popularity numbers loaded from {popularity_filename}.")
        except FileNotFoundError:
            logging.warning(
                f"popularity data could not be found at {popularity_filename}; counting from scratch."
            )
    else:
        logging.warning(
            "POPULARITY_DATA not set, popularity will not be saved for this session."
        )

    u = Updater(token=api_token, use_context=True)

    d = u.dispatcher
    d.add_handler(InlineQueryHandler(callback=process_query, ))
    d.add_handler(ChosenInlineResultHandler(callback=count_hits, ))
    d.add_error_handler(report_error)

    j = u.job_queue
    if ranking_update_frequency:
        j.run_repeating(update_ranking, ranking_update_frequency)
    else:
        update_ranking(None)  # guarantees update_ranking runs on startup

    u.start_polling()
    u.idle()
コード例 #9
0
    def __init__(self, token):
        super().__init__(token)
        
        self.dispatcher.add_handler(InlineQueryHandler(self.inline_query_dispatcher))

        self.inline_query = []

        #
        def callback_query_handler(bot, update):
            logging.log(logging.WARNING, "Unimplemented event callback_query_handler:")
            print("\t" + str(update))

        def message_handler(bot, update):
            logging.log(logging.WARNING, "Unimplemented event message_handler:")
            print("\t" + str(update))

        def chosen_inline_result_handler(bot, update):
            logging.log(logging.WARNING, "Unimplemented event chosen_inline_result_handler:")
            print("\t" + str(update))

        self.dispatcher.add_handler(CallbackQueryHandler(callback_query_handler))
        # self.dispatcher.add_handler(MessageHandler([], message_handler)) TODO except commands
        self.dispatcher.add_handler(ChosenInlineResultHandler(chosen_inline_result_handler))
コード例 #10
0
ファイル: vbot.py プロジェクト: AlertaDengue/vigibot
def main():
    module_logger.info("Vigibot starting...")
    updater = Updater(token=BOT_TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # bot's error handler
    dispatcher.add_error_handler(error)

    # bot's command handlers
    ola_handler = CommandHandler('ola', bom_dia, run_async=True)
    dispatcher.add_handler(ola_handler)
    # ola_handler2 = CommandHandler('olá', bom_dia)
    # dispatcher.add_handler(ola_handler2)

    alerta_handler = CommandHandler('alerta',
                                    alerta,
                                    pass_args=True,
                                    pass_user_data=True,
                                    run_async=True)
    dispatcher.add_handler(alerta_handler)

    unknown_handler = MessageHandler(Filters.command, unknown, run_async=True)
    dispatcher.add_handler(unknown_handler)

    location_handler = MessageHandler(Filters.location,
                                      location,
                                      pass_user_data=True,
                                      run_async=True)
    dispatcher.add_handler(location_handler)

    dispatcher.add_handler(InlineQueryHandler(inlinequery, run_async=True))

    result_chosen_handler = ChosenInlineResultHandler(on_inline_result_chosen)
    dispatcher.add_handler(result_chosen_handler)

    updater.start_polling()
    updater.idle()
コード例 #11
0
def main():
    # Create the Updater and pass it your bot's token.
    # Make sure to set use_context=True to use the new context based callbacks
    # Post version 12 this will no longer be necessary
    persistence = PicklePersistence(filename=USERPREF_PATH,
                                    store_user_data=True,
                                    store_chat_data=False,
                                    singe_file=False,
                                    on_flush=False)
    updater = Updater(os.environ["TOKEN"],
                      use_context=True,
                      persistence=persistence)

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

    # on different commands - answer in Telegram
    dp.add_handler(CommandHandler("ayuda", help))
    dp.add_handler(CommandHandler("help", help))
    dp.add_handler(CommandHandler("start", help))

    # on noncommand i.e message - echo the message on Telegram
    dp.add_handler(InlineQueryHandler(inlinequery))
    # Handle selection so we store that for latter use.
    dp.add_handler(ChosenInlineResultHandler(inlinequeryselected))

    # 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()
コード例 #12
0
def main():
    updater = Updater(config.TOKEN)

    dp = updater.dispatcher

    dp.add_handler(CommandHandler(['start', 'help'], handlers.help_))
    dp.add_handler(handlers.conversation)
    dp.add_handler(
        MessageHandler(Filters.private & Filters.sticker & is_in_database,
                       handlers.sticker))
    dp.add_handler(CommandHandler(['info', 'stats'], handlers.info))
    dp.add_handler(
        CommandHandler('add_tags', handlers.add_tags, pass_args=True))
    dp.add_handler(
        CommandHandler('delete_tag', handlers.delete_tag, pass_args=True))
    dp.add_handler(CommandHandler('delete', handlers.delete))
    dp.add_handler(CommandHandler('my', handlers.my))
    dp.add_handler(
        RegexHandler('/(?P<id>\d+)', handlers.get_by_id, pass_groupdict=True))
    dp.add_handler(InlineQueryHandler(handlers.inlinequery))
    dp.add_handler(ChosenInlineResultHandler(handlers.chosen_inline_result))

    with open('admins.json') as f:
        admins = json.load(f)
    dp.add_handler(
        CommandHandler('admin_delete_tag',
                       filter_user_ids(admins, handlers.admin_delete_tag),
                       pass_args=True))
    dp.add_handler(
        CommandHandler('admin_delete',
                       filter_user_ids(admins, handlers.admin_delete)))

    dp.add_error_handler(error_handler)

    updater.start_polling()
    updater.idle()
コード例 #13
0
def main():
    load_files()

    updater = Updater(config['token'], use_context=True, workers=10)
    dispatcher = updater.dispatcher
    global bot
    bot = updater.bot

    # register a handler to ignore all non-private updates
    dispatcher.add_handler(MessageHandler(~Filters.private,
                                          do_fucking_nothing))

    # register commands
    dispatcher.add_handler(CommandHandler('broadcast', broadcast_command))
    dispatcher.add_handler(CommandHandler('donate', donate_command))
    dispatcher.add_handler(CommandHandler('help', help_command))
    dispatcher.add_handler(CommandHandler('icon', icon_command))
    dispatcher.add_handler(CommandHandler('info', info_command))
    dispatcher.add_handler(CommandHandler('lang', change_lang_command))
    dispatcher.add_handler(CommandHandler('langstats', lang_stats_command))
    dispatcher.add_handler(CommandHandler('log', log_command))
    dispatcher.add_handler(CommandHandler(['optin', 'optout'], opt_command))
    dispatcher.add_handler(CommandHandler('restart', restart_command))
    dispatcher.add_handler(CommandHandler('start', start_command))
    dispatcher.add_handler(CommandHandler('stats', stats_command))

    # register invalid command handler
    dispatcher.add_handler(MessageHandler(Filters.command, invalid_command))

    # register media listener
    dispatcher.add_handler(
        MessageHandler((Filters.photo | Filters.document), image_received))
    dispatcher.add_handler(MessageHandler(Filters.sticker, sticker_received))
    dispatcher.add_handler(MessageHandler(Filters.text, url_received))
    dispatcher.add_handler(MessageHandler(Filters.all, invalid_content))

    # register button handlers
    dispatcher.add_handler(
        CallbackQueryHandler(change_lang_callback, pattern="lang"))
    dispatcher.add_handler(
        CallbackQueryHandler(icon_cancel_callback, pattern="icon_cancel"))

    # register inline handlers
    dispatcher.add_handler(
        InlineQueryHandler(share_query_received,
                           pattern=re.compile("^share$", re.IGNORECASE)))
    dispatcher.add_handler(
        InlineQueryHandler(file_id_query_received, pattern=re.compile("")))
    dispatcher.add_handler(InlineQueryHandler(share_query_received))

    dispatcher.add_handler(ChosenInlineResultHandler(inline_result_chosen))

    # register variable dump loop
    updater.job_queue.run_repeating(save_files, config['save_interval'],
                                    config['save_interval'])

    # register error handler
    dispatcher.add_error_handler(handle_error)

    updater.start_polling(clean=True, timeout=99999)

    print("Bot finished starting")

    updater.idle()
コード例 #14
0
def main(updater):
    dispatcher = updater.dispatcher

    dbFuncs.initDB()

    newcomm = CommandHandler('new', new, Filters.private)
    startcomm = CommandHandler('start', start, Filters.private, pass_args=True)
    cancelcomm = CommandHandler('cancel',
                                cancel,
                                Filters.private,
                                pass_user_data=True)
    sendcomm = CommandHandler(
        'send', sendAll, Filters.private & Filters.chat(chat_id=[114951690]))
    helpcomm = CommandHandler('help', help, Filters.private)
    backupcomm = CommandHandler('backup', backup, Filters.private)
    settingscomm = CommandHandler('settings', settings, Filters.private)
    pushinlinecall = CallbackQueryHandler(pushInline,
                                          pattern=r"^" + patterns[0])
    pushadmincall = CallbackQueryHandler(pushAdmin, pattern=r"^" + patterns[1])
    settingsmaincall = CallbackQueryHandler(settings_main,
                                            pattern=r"^" + patterns[2])
    settingslangcall = CallbackQueryHandler(settings_language,
                                            pattern=r"^" + patterns[3])
    setnamemess = MessageHandler(Filters.text & Filters.private, setName)
    blankcodemess = MessageHandler(Filters.private & Filters.regex(r'^\/.*'),
                                   blankCode)
    editmessagemess = MessageHandler(
        Filters.private & Filters.text & Filters.update.edited_message,
        editMessage)
    rcvreplymess = MessageHandler(
        Filters.private & Filters.text & Filters.reply &
        (~Filters.update.edited_message), rcvReply)
    rcvmessagemess = MessageHandler(
        Filters.private & Filters.text & (~Filters.update.edited_message),
        rcvMessage)

    newlistconv = ConversationHandler(entry_points=[newcomm, startcomm],
                                      states={SETNAME: [setnamemess]},
                                      fallbacks=[cancelcomm],
                                      persistent=True,
                                      name="newlist")

    listhandlerconv = ConversationHandler(
        entry_points=[pushinlinecall],
        states={SETTINGS: [pushadmincall]},
        fallbacks=[pushinlinecall, cancelcomm],
        persistent=True,
        name="listhandler",
        per_message=True)

    settingshandlerconv = ConversationHandler(entry_points=[settingsmaincall],
                                              states={
                                                  SETTINGS: [settingsmaincall],
                                                  LANGUAGE: [settingslangcall]
                                              },
                                              fallbacks=[cancelcomm],
                                              persistent=True,
                                              name="settingshandler",
                                              per_message=True)

    dispatcher.add_handler(newlistconv)
    dispatcher.add_handler(listhandlerconv)
    dispatcher.add_handler(settingshandlerconv)
    dispatcher.add_handler(pushinlinecall)
    dispatcher.add_handler(CallbackQueryHandler(fixButtons))
    dispatcher.add_handler(sendcomm)
    dispatcher.add_handler(helpcomm)
    dispatcher.add_handler(backupcomm)
    dispatcher.add_handler(settingscomm)
    dispatcher.add_handler(InlineQueryHandler(inlineQuery))
    dispatcher.add_handler(ChosenInlineResultHandler(chosenQuery))
    dispatcher.add_handler(blankcodemess)
    dispatcher.add_handler(editmessagemess)
    dispatcher.add_handler(rcvreplymess)
    dispatcher.add_handler(rcvmessagemess)
    dispatcher.add_error_handler(contextCallback)

    updater.start_polling()

    updater.idle()
コード例 #15
0
                               name1=player.prev.user.first_name,
                               name2=player.user.first_name))
        try:
            player.draw()
        except DeckEmptyError:
            send_async(bot,
                       player.game.chat.id,
                       text=__("There are no more cards in the deck.",
                               multi=game.translate))

    game.turn()


# Add all handlers to the dispatcher and run the bot
dispatcher.add_handler(InlineQueryHandler(reply_to_query))
dispatcher.add_handler(ChosenInlineResultHandler(process_result))
dispatcher.add_handler(CallbackQueryHandler(select_game))
dispatcher.add_handler(CommandHandler('start', start_game, pass_args=True))
dispatcher.add_handler(CommandHandler('new', new_game))
dispatcher.add_handler(CommandHandler('join', join_game))
dispatcher.add_handler(CommandHandler('leave', leave_game))
dispatcher.add_handler(CommandHandler('open', open_game))
dispatcher.add_handler(CommandHandler('close', close_game))
dispatcher.add_handler(
    CommandHandler('enable_translations', enable_translations))
dispatcher.add_handler(
    CommandHandler('disable_translations', disable_translations))
dispatcher.add_handler(CommandHandler('skip', skip_player))
dispatcher.add_handler(CommandHandler('notify_me', notify_me))
simple_commands.register()
settings.register()
コード例 #16
0
    def test_context(self, cdp, chosen_inline_result):
        handler = ChosenInlineResultHandler(self.callback_context)
        cdp.add_handler(handler)

        cdp.process_update(chosen_inline_result)
        assert self.test_flag
コード例 #17
0
ファイル: bot.py プロジェクト: dvlwj/unorindo_bot
    if player.waiting_time < WAITING_TIME:
        player.waiting_time = WAITING_TIME
        send_async(bot,
                   chat.id,
                   text=__(
                       "Waiting time for {name} has been reset to {time} "
                       "seconds",
                       multi=player.game.translate).format(name=display_name(
                           player.user),
                                                           time=WAITING_TIME))


# Add all handlers to the dispatcher and run the bot
dispatcher.add_handler(InlineQueryHandler(reply_to_query))
dispatcher.add_handler(
    ChosenInlineResultHandler(process_result, pass_job_queue=True))
dispatcher.add_handler(CallbackQueryHandler(select_game))
dispatcher.add_handler(
    CommandHandler('start', start_game, pass_args=True, pass_job_queue=True))
dispatcher.add_handler(CommandHandler('new', new_game))
dispatcher.add_handler(CommandHandler('kill', kill_game))
dispatcher.add_handler(CommandHandler('join', join_game))
dispatcher.add_handler(CommandHandler('leave', leave_game))
dispatcher.add_handler(CommandHandler('kick', kick_player))
dispatcher.add_handler(CommandHandler('open', open_game))
dispatcher.add_handler(CommandHandler('close', close_game))
dispatcher.add_handler(
    CommandHandler('enable_translations', enable_translations))
dispatcher.add_handler(
    CommandHandler('disable_translations', disable_translations))
dispatcher.add_handler(CommandHandler('skip', skip_player))
コード例 #18
0
ファイル: bot.py プロジェクト: MortadhaAlaa/multiwbot
        bot.answerCallbackQuery(query.id, 'Message not found')
        return

    if user.lower() == sender.lower() or user.lower() in receivers.lower(
    ) or user.lower() in gods.lower():
        bot.answerCallbackQuery(query.id, message, show_alert=True)
    else:
        bot.answerCallbackQuery(query.id,
                                "You can't read this message",
                                show_alert=True)


def error(bot, update, error):
    logging.warning('Update "%s" caused error "%s"' % (update, error))


updater = Updater(token)

dp = updater.dispatcher
dp.add_handler(InlineQueryHandler(inline_whisper))
dp.add_handler(CallbackQueryHandler(show_message))
dp.add_handler(ChosenInlineResultHandler(chosen))
dp.add_error_handler(error)

# Start the Bot
updater.start_polling()

# Run the bot until the user presses Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT
updater.idle()
コード例 #19
0
dispatcher.add_handler(
    CallbackQueryHandler(handle_callback_query,
                         pattern=get_callback_mapping_regex()))
dispatcher.add_handler(
    CallbackQueryHandler(
        handle_async_callback_query,
        pattern=get_async_callback_mapping_regex(),
        run_async=True,
    ))

# InlineQuery handler
dispatcher.add_handler(InlineQueryHandler(search, run_async=True))

# InlineQuery result handler
dispatcher.add_handler(
    ChosenInlineResultHandler(handle_chosen_inline_result, run_async=True))

# Set the log level for apscheduler to WARNING
# There's a lot of log output spam otherwise
logging.getLogger("apscheduler").setLevel(logging.WARNING)

# Register all jobs
minute = 60
hour = 60 * minute
job_queue = updater.job_queue
job_queue.run_repeating(
    delete_polls,
    interval=5,
    first=0,
    name="Delete polls that are scheduled for deletion.",
)
コード例 #20
0
def main():

    updater = None
    dp = None
    bot = None
    botnick = "bot"
    connected = False
    parse_mode = "IRC"
    tsleep = 0
    batching = False
    batchtarget = ""
    batchmsg = ""

    try:
        send("X :Waiting for PASS with Telegram bot token")
        import sys
        while True:
            line = sys.stdin.readline()
            if not line:
                break
            prefix, cmd_orig, args = irc_parse(line)
            cmd = cmd_orig.upper()
            chat_id = None  # make sure this isn't set to the old value.
            anywork = True
            if cmd == "PASS":
                if not updater:
                    updater = Updater(args[0])
                    dp = updater.dispatcher
                    bot = dp.bot
                    botnick = bot.username or botnick
                    #dp.add_handler(CommandHandler("start", start))
                    dp.add_handler(MessageHandler([Filters.text], on_msg))
                    dp.add_handler(MessageHandler([Filters.command], on_msg))
                    dp.add_handler(
                        MessageHandler([Filters.sticker], on_sticker))
                    dp.add_handler(InlineQueryHandler(on_inlinequery))
                    dp.add_handler(
                        ChosenInlineResultHandler(on_inlinequeryresult))
                    updater.dispatcher.add_handler(
                        CallbackQueryHandler(on_button_pressed))
                    dp.add_error_handler(error)  # log all errors
                    #updater.job_queue.put(Job(asdfasdf, 10, repeat=True, context=None))
                    updater.start_polling()
            elif cmd == "NICK":
                #botnick = args[0]
                if not connected:
                    connected = True
                    send(":" + SERVER_NAME + " 001 " + botnick +
                         " :Welcome to Telegram")
                    send((
                        ":" + SERVER_NAME + " 005 " + botnick +
                        " NETWORK=Telegram CASEMAPPING=ascii" +
                        " CHANTYPES=#&!+ TPARSEMODE=IRC,Plain,HTML,Markdown NICKLEN=500 TSLEEP TBATCHMSG :are supported by this server"
                    ))
                    send(":" + SERVER_NAME + " 422 " + botnick + " :No MOTD")
            elif cmd == "TSLEEP":
                if len(args) > 0:
                    tsleep = float(args[0])
                send(":" + SERVER_NAME + " 300 " + cmd + " :" + str(tsleep))
            elif cmd == "USER":
                anywork = False
            elif cmd == "JOIN":
                anywork = False
            elif cmd == "PART":
                anywork = False
            elif cmd == "BATCH":
                anywork = False
                try:
                    if batching and batchtarget and batchmsg:
                        sendbotmsg(bot, batchtarget, batchmsg, parse_mode)
                        anywork = True
                finally:
                    batching = False
                    batchtarget = ""
                    batchmsg = ""
                if len(args) >= 2 and args[0][0] == '+' and args[
                        1] == SERVER_NAME + "/TBATCHMSG":
                    batching = True
            elif cmd == "PRIVMSG":
                if bot:
                    chat_id = target_to_chat_id(args[0])
                    msg = args[1]
                    sticker = msg[18:].rstrip("\1") if msg.startswith(
                        "\1TELEGRAM-STICKER ") else None
                    if batching:
                        if not batchtarget:
                            batchtarget = chat_id
                        if batchmsg and (sticker is not None
                                         or batchtarget != chat_id):
                            try:
                                sendbotmsg(bot, batchtarget, batchmsg,
                                           parse_mode)
                            finally:
                                batching = False
                                batchtarget = ""
                                batchmsg = ""
                    if sticker is not None:
                        msg = ""
                        sendbotsticker(bot, chat_id, sticker)
                    elif args[1].startswith("\1ACTION "):
                        msg = args[1][8:].rstrip("\1")
                    if msg:
                        if batchtarget == chat_id:
                            if batchmsg:
                                batchmsg += "\n" + msg
                            else:
                                batchmsg = msg
                            anywork = False
                        else:
                            sendbotmsg(bot, chat_id, msg, parse_mode)
            elif cmd == "NOTICE":
                if bot:
                    chat_id = target_to_chat_id(args[0])
                    sendbotmsg(bot, chat_id, "Notice: " + args[1], parse_mode)
            elif cmd == "PING":
                send(":" + SERVER_NAME + " PONG " + SERVER_NAME + " :" +
                     (args[0] if len(args) else ""))
            elif cmd == "PONG":
                pass
            elif cmd == "TPARSEMODE":
                if len(args) > 0:
                    parse_mode = None if args[0].upper(
                    ) == "PLAIN" else args[0]
                send(":" + SERVER_NAME + " 300 " + cmd + " :" +
                     ("Plain" if not parse_mode else parse_mode))
            elif cmd == "QUIT":
                send("X :Quit: " + ("" if len(args) == 0 else args[0]))
                break
            elif cmd == "CAP":
                subcmd = args[0].upper() if len(args) > 0 else ""
                if subcmd == "LS":
                    # List supported caps.
                    send("CAP " + botnick + " ACK :" +
                         " ".join(caps_supported))
                elif subcmd == "REQ":
                    # Doesn't bother with capability modifiers.
                    new_caps_str = args[1] if len(args) > 1 else ""
                    new_caps = new_caps_str.split()
                    okcaps = True
                    if new_caps:
                        for newcap in new_caps:
                            if newcap not in caps_supported:
                                okcaps = False
                                break
                        if okcaps:
                            for newcap in new_caps:
                                if newcap not in caps_enabled:
                                    caps_enabled.append(newcap)
                    if okcaps:
                        send("CAP " + botnick + " ACK :" + new_caps_str)
                    else:
                        send("CAP " + botnick + " NAK :" + new_caps_str)
                elif subcmd == "LIST":
                    # List enabled caps.
                    send("CAP " + botnick + " ACK :" + " ".join(caps_enabled))
                elif subcmd == "END":
                    pass
                else:
                    send(":" + SERVER_NAME + " 410 " +
                         (args[0].partition(' ')[0] if len(args) > 0 else "") +
                         " :Invalid CAP subcommand")
                anywork = False
            elif cmd == "":
                anywork = False
            else:
                send(":" + SERVER_NAME + " 421 " + cmd + " :Unknown command")
            flush()
            if anywork:
                time.sleep(tsleep)
    except KeyboardInterrupt as e:
        send("X :Interrupted")
    except Exception as e:
        logger.error(e, exc_info=True)
        send("X :Error")
    finally:
        if updater:
            updater.stop()
            flush()
コード例 #21
0
                            interval=10,
                            first=0,
                            name='Scan new sticker sets')
    job_queue.run_repeating(distribute_tasks_job,
                            interval=minute,
                            first=2 * minute,
                            name='Distribute new tasks')
    job_queue.run_repeating(cleanup_job,
                            interval=2 * hour,
                            first=0,
                            name='Perform some database cleanup tasks')

    # Create private message handler
    dispatcher.add_handler(
        MessageHandler(Filters.sticker & Filters.private,
                       handle_private_sticker))
    dispatcher.add_handler(
        MessageHandler(
            Filters.text & Filters.private & (~Filters.update.edited_message) &
            (~Filters.reply), handle_private_text))
    dispatcher.add_handler(
        MessageHandler(Filters.update.edited_message, handle_edited_messages))

    # Inline callback handler
    dispatcher.add_handler(CallbackQueryHandler(handle_callback_query))
    dispatcher.add_handler(
        ChosenInlineResultHandler(handle_chosen_inline_result))

    # Error handling
    dispatcher.add_error_handler(error_callback)
コード例 #22
0
def main():
    init_sentry()

    db_engine = create_engine(settings.DATABASE["url"])
    init_sqlalchemy(db_engine)

    init_translations()

    updater = Updater(token=settings.BOT_TOKEN, use_context=True)

    dp = updater.dispatcher

    dp.add_handler(CommandHandler("nothing", cancel_callback))

    feedback_handler = ConversationHandler(
        entry_points=[CommandHandler("feedback", feedback_callback)],
        states={1: [MessageHandler(Filters.text, send_feedback_callback)]},
        fallbacks=[CommandHandler("nothing", cancel_callback)],
    )

    dp.add_handler(feedback_handler)

    settings_handler = ConversationHandler(
        entry_points=[
            CommandHandler("settings",
                           personal_settings.main.settings_callback)
        ],
        states={
            personal_settings.SettingsSteps.main: [
                MessageHandler(Filters.regex(r"^↩️"), cancel_callback),
                MessageHandler(Filters.regex(r"^1. "),
                               personal_settings.language.menu_callback),
                MessageHandler(
                    Filters.regex(r"^2. "),
                    personal_settings.default_currency.menu_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^3. "),
                    personal_settings.default_currency_position.menu_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^4. "),
                    personal_settings.onscreen_menu.menu_callback,
                ),
            ],
            personal_settings.SettingsSteps.language: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.main.settings_callback),
                MessageHandler(Filters.text,
                               personal_settings.language.set_callback),
            ],
            personal_settings.SettingsSteps.default_currency: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.main.settings_callback),
                MessageHandler(
                    Filters.text,
                    personal_settings.default_currency.set_callback),
            ],
            personal_settings.SettingsSteps.default_currency_position: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.main.settings_callback),
                MessageHandler(
                    Filters.text,
                    personal_settings.default_currency_position.set_command,
                ),
            ],
            personal_settings.SettingsSteps.onscreen_menu: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.main.settings_callback),
                MessageHandler(
                    Filters.regex(r"^1. "),
                    personal_settings.onscreen_menu.visibility_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^2. "),
                    personal_settings.onscreen_menu.size_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^3. "),
                    personal_settings.onscreen_menu.edit_history_callback,
                ),
            ],
            personal_settings.SettingsSteps.onscreen_menu_visibility: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.onscreen_menu.menu_callback),
                MessageHandler(
                    Filters.regex(r"^1. "),
                    personal_settings.onscreen_menu.
                    visibility_set_true_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^2. "),
                    personal_settings.onscreen_menu.
                    visibility_set_false_callback,
                ),
            ],
            personal_settings.SettingsSteps.onscreen_menu_edit_history: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.onscreen_menu.menu_callback),
                MessageHandler(
                    Filters.regex(r"^🅾️"),
                    personal_settings.onscreen_menu.
                    edit_history_delete_old_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^🆑"),
                    personal_settings.onscreen_menu.
                    edit_history_delete_all_callback,
                ),
                MessageHandler(
                    Filters.regex(r"^❌"),
                    personal_settings.onscreen_menu.
                    edit_history_delete_one_callback,
                ),
            ],
            personal_settings.SettingsSteps.onscreen_menu_size: [
                MessageHandler(Filters.regex(r"^↩️"),
                               personal_settings.onscreen_menu.menu_callback),
                MessageHandler(
                    Filters.text,
                    personal_settings.onscreen_menu.set_size_callback),
            ],
        },
        fallbacks=[CommandHandler("cancel", cancel_callback)],
    )

    dp.add_handler(settings_handler)

    dp.add_handler(CommandHandler("currencies", currencies_callback))
    dp.add_handler(CommandHandler("disclaimers", disclaimers_callback))
    dp.add_handler(CommandHandler("feedback", feedback_callback))
    dp.add_handler(CommandHandler("help", help_callback))
    dp.add_handler(CommandHandler("p", price.price_callback, pass_args=True))
    dp.add_handler(
        CommandHandler("settings", personal_settings.main.settings_callback))
    dp.add_handler(CommandHandler("start", start_callback))
    dp.add_handler(CommandHandler("stop", stop_callback))
    dp.add_handler(CommandHandler("sources", sources_callback))
    dp.add_handler(CommandHandler("tutorial", tutorial_callback))

    dp.add_handler(MessageHandler(Filters.regex(r"^/donate"), donate_callback))

    dp.add_handler(
        MessageHandler(Filters.regex(r"^/"), price.on_slash_callback))

    dp.add_handler(InlineQueryHandler(price.inline_query_callback))
    dp.add_handler(ChosenInlineResultHandler(price.inline_result_callback))

    dp.add_handler(MessageHandler(Filters.text, price.message_callback))

    # log all errors
    dp.add_error_handler(error_callback)

    # Start the Bot
    updater.start_polling(poll_interval=0.5, timeout=10)

    # Run the bot until you press 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()
コード例 #23
0
ファイル: bot.py プロジェクト: GnohChengYi/BridgeSG
            if player is game.players[-1]:
                game.complete_trick()
            request_card(chatId, context)


def error(update, context):
    logger.warning('\nUpdate "%s" caused error "%s"', update, context.error)


if __name__ == '__main__':
    token = os.environ['TELEGRAM_TOKEN']
    updater = Updater(token=token,
                      use_context=True,
                      request_kwargs={
                          'read_timeout': 20,
                          'connect_timeout': 20
                      })
    logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        level=logging.INFO)
    logger = logging.getLogger(__name__)
    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CommandHandler('stop', stop))
    updater.dispatcher.add_handler(CommandHandler('help', help))
    updater.dispatcher.add_handler(CallbackQueryHandler(button))
    updater.dispatcher.add_handler(InlineQueryHandler(inline_action))
    updater.dispatcher.add_error_handler(error)
    updater.dispatcher.add_handler(ChosenInlineResultHandler(action))
    updater.start_polling()
    updater.idle()
コード例 #24
0
 def test_other_update_types(self, false_update):
     handler = ChosenInlineResultHandler(self.callback_basic)
     assert not handler.check_update(false_update)
コード例 #25
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)
コード例 #26
0
ファイル: routing.py プロジェクト: Bfaschat/BotListBot
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)
コード例 #27
0
    dispatcher.add_handler(CommandHandler('refresh', refresh_sticker_sets))
    dispatcher.add_handler(CommandHandler('refresh_ocr', refresh_ocr))
    dispatcher.add_handler(CommandHandler('cleanup', cleanup))
    dispatcher.add_handler(CommandHandler('tasks', start_tasks))
    dispatcher.add_handler(CommandHandler('stats', stats))

    # Regular tasks
    minute = 60
    hour = minute*60
    job_queue = updater.job_queue
    job_queue.run_repeating(newsfeed_job, interval=minute*5, first=0, name='Process newsfeed')
    job_queue.run_repeating(maintenance_job, interval=hour*2, first=0, name='Create new maintenance tasks')
    job_queue.run_repeating(scan_sticker_sets_job, interval=10, first=0, name='Scan new sticker sets')
    job_queue.run_repeating(distribute_tasks_job, interval=minute, first=minute*2, name='Distribute new tasks')
    job_queue.run_repeating(cleanup_job, interval=hour*2, first=0, name='Perform some database cleanup tasks')

    # Create private message handler
    dispatcher.add_handler(
        MessageHandler(Filters.sticker & Filters.private, handle_private_sticker))
    dispatcher.add_handler(
        MessageHandler(Filters.text & Filters.private & (~Filters.update.edited_message) & (~Filters.reply), handle_private_text))
    dispatcher.add_handler(
        MessageHandler(Filters.update.edited_message, handle_edited_messages))

    # Inline callback handler
    dispatcher.add_handler(CallbackQueryHandler(handle_callback_query))
    dispatcher.add_handler(ChosenInlineResultHandler(handle_chosen_inline_result))

    # Error handling
    dispatcher.add_error_handler(error_callback)
コード例 #28
0
def main(updater):
    dispatcher = updater.dispatcher

    dbFuncs.initDB()

    newList = ConversationHandler(
        entry_points=[
            CommandHandler('new', new, Filters.private),
            CommandHandler('start', start, Filters.private, pass_args=True)
        ],
        states={
            SETNAME: [MessageHandler(Filters.text & Filters.private, setName)]
        },
        fallbacks=[
            CommandHandler('cancel',
                           cancel,
                           Filters.private,
                           pass_user_data=True)
        ])

    listHandler = ConversationHandler(
        entry_points=[CallbackQueryHandler(pushInline)],
        states={SETTINGS: [CallbackQueryHandler(pushAdmin)]},
        fallbacks=[
            CallbackQueryHandler(pushInline),
            CommandHandler('cancel',
                           cancel,
                           Filters.private,
                           pass_user_data=True)
        ],
        per_message=True)

    dispatcher.add_handler(newList)
    dispatcher.add_handler(listHandler)
    dispatcher.add_handler(CallbackQueryHandler(pushInline))
    dispatcher.add_handler(
        CommandHandler('send', sendAll,
                       Filters.private & Filters.chat(chat_id=[114951690])))
    dispatcher.add_handler(CommandHandler('help', help, Filters.private))
    dispatcher.add_handler(CommandHandler('backup', backup, Filters.private))
    dispatcher.add_handler(InlineQueryHandler(inlineQuery))
    dispatcher.add_handler(ChosenInlineResultHandler(chosenQuery))
    dispatcher.add_handler(
        MessageHandler(Filters.private & Filters.regex(r'^\/.*'), blankCode))
    dispatcher.add_handler(
        MessageHandler(
            Filters.text & Filters.private & Filters.update.edited_message,
            editMessage))
    dispatcher.add_handler(
        MessageHandler(
            Filters.private & Filters.text & Filters.reply &
            (~Filters.update.edited_message), rcvReply))
    dispatcher.add_handler(
        MessageHandler(
            Filters.text & Filters.private & (~Filters.update.edited_message),
            rcvMessage))
    dispatcher.add_error_handler(contextCallback)

    try:
        with open('{0}/userdata'.format(backupsDir), 'rb') as file:
            dispatcher.user_data = pload(file)
    except Exception as e:
        logger.warning(repr(e))
    try:
        with open('{0}/newList'.format(backupsDir), 'rb') as file:
            newList.conversations = pload(file)
    except Exception as e:
        logger.warning(repr(e))
    try:
        with open('{0}/listHandler'.format(backupsDir), 'rb') as file:
            listHandler.conversations = pload(file)
    except Exception as e:
        logger.warning(repr(e))

    updater.start_polling()

    updater.idle()

    try:
        with open('{0}/userdata'.format(backupsDir), 'wb+') as file:
            pdump(dispatcher.user_data, file)
    except Exception as e:
        logger.warning(repr(e))
    try:
        with open('{0}/newList'.format(backupsDir), 'wb+') as file:
            pdump(newList.conversations, file)
    except Exception as e:
        logger.warning(repr(e))
    try:
        with open('{0}/listHandler'.format(backupsDir), 'wb+') as file:
            pdump(listHandler.conversations, file)
    except Exception as e:
        logger.warning(repr(e))
コード例 #29
0
ファイル: inline.py プロジェクト: MasterSpy/tgbot
    results = [
        InlineQueryResultArticle(
            id=ARTICLE_ID_REGEXP.search(article['url']).group(1),
            title=article['source']['article']['title'],
            input_message_content=InputTextMessageContent(
                message_text='FAQ page: <a href="{}">{}</a>'.format(
                    FRESHDESK_URL + article['url'],
                    escape_HTML(article['source']['article']['title'])),
                parse_mode='HTML',
                disable_web_page_preview=True),
            description=article['source']['article']['desc_un_html'][:80] +
            '...') for article in results
    ]

    bot.answer_inline_query(update.inline_query.id, results)


@run_async
def chosen_result(bot, update):
    result_id = update.chosen_inline_result.result_id
    with urllib.request.urlopen(ARTICLE_URL + result_id + '.json') as response:
        article = json.loads(response.read())
    sql.increment(result_id, article['article']['title'])


INLINE_HANDLER = InlineQueryHandler(inline_search)
CHOSEN_HANDLER = ChosenInlineResultHandler(chosen_result)
dispatcher.add_handler(INLINE_HANDLER)
dispatcher.add_handler(CHOSEN_HANDLER, -1)
コード例 #30
0
    else:
        store_results = store.get_all(user_id=user.id)

    results = [
        inline_result_creators.get_for(doc.doc_type)(doc)
        for doc in store_results
    ]
    inline_query.answer(
        results=results,
        is_personal=True,
        cache_time=0,
        auto_pagination=True,
    )


def update_last_used_at(update: Update, context: CallbackContext):
    user = update.chosen_inline_result.from_user
    logger.info(f'User {user.name}({user.id}) selected a query result. Updating last used date.')

    doc_id = update.chosen_inline_result.result_id
    doc = store.get(doc_id)
    doc.last_used_at = datetime.now()
    store.update(doc_id, doc)


inline_result_creators = InlineResultCreatorLoader()
inline_result_creator = inline_result_creators.decorator

inline_search_handler = InlineQueryHandler(inline_search)
chosen_inline_result_handler = ChosenInlineResultHandler(update_last_used_at)