コード例 #1
0
def main():
    # Creating a new bot instance.
    bot = Bot(token=TOKEN, name=NAME, version=VERSION, api_url_base=API_URL)

    # Registering handlers #
    # -------------------- #
    # Handler for start command
    bot.dispatcher.add_handler(StartCommandHandler(callback=start_cb))

    # Handler for help command
    bot.dispatcher.add_handler(HelpCommandHandler(callback=help_cb))

    # Any other user command handler
    bot.dispatcher.add_handler(CommandHandler(command="test",
                                              callback=test_cb))

    # Handler for feedback command
    bot.dispatcher.add_handler(FeedbackCommandHandler(target=OWNER))

    # Handler for unknown commands
    bot.dispatcher.add_handler(
        UnknownCommandHandler(callback=unknown_command_cb))

    # Handler for private command with filter by user
    bot.dispatcher.add_handler(
        CommandHandler(command="restart",
                       filters=Filter.sender(user_id=OWNER),
                       callback=private_command_cb))

    # Handler for add user to chat
    bot.dispatcher.add_handler(
        NewChatMembersHandler(callback=new_chat_members_cb))

    # Handler for left user from chat
    bot.dispatcher.add_handler(
        LeftChatMembersHandler(callback=left_chat_members_cb))

    # Handler for pinned message
    bot.dispatcher.add_handler(
        PinnedMessageHandler(callback=pinned_message_cb))

    # Handler for unpinned message
    bot.dispatcher.add_handler(
        UnPinnedMessageHandler(callback=unpinned_message_cb))

    # Handler for edited message
    bot.dispatcher.add_handler(
        EditedMessageHandler(callback=edited_message_cb))

    # Handler for deleted message
    bot.dispatcher.add_handler(
        DeletedMessageHandler(callback=deleted_message_cb))

    # Handler for message with bot mention
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.message
                       & Filter.mention(user_id=bot.uin),
                       callback=message_with_bot_mention_cb))

    # Handler for mention something else
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.mention()
                       & ~Filter.mention(user_id=bot.uin),
                       callback=mention_cb))

    # Handler for simple text message without media content
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.text, callback=message_cb))

    # Handler with regexp filter
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.regexp("^\d*$"),
                       callback=regexp_only_dig_cb))

    # Handler for no media file. For example, text file
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.data, callback=file_cb))

    # Handlers for other file types
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.image, callback=image_cb))
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.video, callback=video_cb))
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.audio, callback=audio_cb))

    # Handler for sticker
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.sticker, callback=sticker_cb))

    # Handler for url
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.url & ~Filter.sticker, callback=url_cb))

    # Handlers for forward and reply getting
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.forward, callback=forward_cb))
    bot.dispatcher.add_handler(
        MessageHandler(filters=Filter.reply, callback=reply_cb))

    # Send command like this:
    # /pin 6752793278973351456
    # 6752793278973351456 - msgId
    # Handler for pin command
    bot.dispatcher.add_handler(CommandHandler(command="pin", callback=pin_cb))

    # Send command like this:
    # /unpin 6752793278973351456
    # 6752793278973351456 - msgId
    # Handler for unpin command
    bot.dispatcher.add_handler(
        CommandHandler(command="unpin", callback=unpin_cb))

    # Starting a polling thread watching for new events from server. This is a non-blocking call
    # ---------------------------------------------------------------------------------------- #
    bot.start_polling()

    # Call bot methods
    # -------------- #
    # Get info about bot
    bot.self_get()

    # Send message
    response = bot.send_text(chat_id=OWNER, text="Hello")
    msg_id = response.json()['msgId']

    # Reply
    bot.send_text(chat_id=OWNER, text="Reply to 'Hello'", reply_msg_id=msg_id)

    # Forward
    bot.send_text(chat_id=OWNER,
                  text="Forward 'Hello'",
                  forward_msg_id=msg_id,
                  forward_chat_id=OWNER)

    # Send binary file
    with io.StringIO() as file:
        file.write(u'x' * 100)
        file.name = "file.txt"
        file.seek(0)
        response = bot.send_file(chat_id=OWNER,
                                 file=file.read(),
                                 caption="binary file caption")
        file_id = response.json()['fileId']

    # Get file info
    bot.get_file_info(file_id=file_id)

    # Send file by file_id
    bot.send_file(chat_id=OWNER,
                  file_id=file_id,
                  caption="file_id file caption")

    # Send file by file_id as reply to message
    bot.send_file(chat_id=OWNER,
                  file_id=file_id,
                  caption="file_id file caption",
                  reply_msg_id=msg_id)

    # Forward file by file_id
    bot.send_file(chat_id=OWNER,
                  file_id=file_id,
                  caption="file_id file caption",
                  forward_msg_id=msg_id,
                  forward_chat_id=OWNER)

    # Send voice file
    if sys.version_info[0] == 3:
        with io.BytesIO() as file:
            gTTS('Hello everybody!').write_to_fp(file)
            file.name = "hello_voice.mp3"
            file.seek(0)
            response = bot.send_voice(chat_id=OWNER, file=file.read())
            hello_voice_file_id = response.json()['fileId']

        # Send voice by file_id
        bot.send_voice(chat_id=OWNER, file_id=hello_voice_file_id)

    # Edit text
    msg_id = bot.send_text(chat_id=OWNER,
                           text="Message to be edited").json()['msgId']
    bot.edit_text(chat_id=OWNER, msg_id=msg_id, text="edited text")

    # Delete message
    msg_id = bot.send_text(chat_id=OWNER,
                           text="Message to be deleted").json()['msgId']
    bot.delete_messages(chat_id=OWNER, msg_id=msg_id)

    # Send typing action
    bot.send_actions(chat_id=OWNER, actions=["typing"])
    sleep(1)
    # Stop typing
    bot.send_actions(chat_id=OWNER, actions=[])

    # Get info about chat
    bot.get_chat_info(chat_id=TEST_CHAT)

    # Get chat admins
    bot.get_chat_admins(chat_id=TEST_CHAT)
    # Get chat members
    bot.get_chat_members(chat_id=TEST_CHAT)
    # Get chat blocked users
    bot.get_chat_blocked_users(chat_id=TEST_CHAT)
    # Get chat pending users
    bot.get_chat_pending_users(chat_id=TEST_CHAT)

    # Block user in chat
    bot.chat_block_user(chat_id=TEST_CHAT,
                        user_id=TEST_USER,
                        del_last_messages=True)
    # Unlock user in chat
    bot.chat_unblock_user(chat_id=TEST_CHAT, user_id=TEST_USER)

    # Chat resolve pending user or everyone
    bot.chat_resolve_pending(chat_id=TEST_CHAT,
                             approve=True,
                             user_id=TEST_USER,
                             everyone=False)

    # Set chat title
    bot.set_chat_title(chat_id=TEST_CHAT, title="TEST TITLE")
    # Set chat about
    bot.set_chat_about(chat_id=TEST_CHAT, about="TEST ABOUT")
    # Set chat title
    bot.set_chat_rules(chat_id=TEST_CHAT, rules="TEST RULES")

    # Send bot buttons
    bot.send_text(chat_id=OWNER,
                  text="Hello with buttons.",
                  inline_keyboard_markup="[{}]".format(
                      json.dumps([{
                          "text": "Action 1",
                          "url": "http://mail.ru"
                      }, {
                          "text": "Action 2",
                          "callbackData": "call_back_id_2"
                      }, {
                          "text": "Action 3",
                          "callbackData": "call_back_id_3"
                      }])))

    # Handler for bot buttons reply.
    bot.dispatcher.add_handler(
        BotButtonCommandHandler(callback=buttons_answer_cb))

    bot.idle()
コード例 #2
0
def main():
    # создаем инстанс бота
    bot = Bot(token=TOKEN, name=NAME, version=VERSION, api_url_base=API_URL)

    # Регистрация хэндлеров #
    # -------------------- #
    # Хэндлер для команды /start
    bot.dispatcher.add_handler(StartCommandHandler(callback=start_cb))

    # Хэндлер для команды /help
    bot.dispatcher.add_handler(HelpCommandHandler(callback=help_cb))

    # Хэндлер для пользовательской команды /test
    bot.dispatcher.add_handler(CommandHandler(command="test", callback=test_cb))

    # Хэндлер для фидбэка
    bot.dispatcher.add_handler(FeedbackCommandHandler(target=OWNER))

    # Хэндлер для неправильной команды
    bot.dispatcher.add_handler(UnknownCommandHandler(callback=unknown_command_cb))

    # Хэндлер для приватной команды с фильтром по отправителю (сработает только при отправке команды разработчиком бота)
    bot.dispatcher.add_handler(CommandHandler(
        command="restart",
        filters=Filter.sender(user_id=OWNER),
        callback=private_command_cb
    ))

    # Хэндлер для команды "Новый пользователь"
    bot.dispatcher.add_handler(NewChatMembersHandler(callback=new_chat_members_cb))

    # Хэндлер для команды "Пользователь покинул группу"
    bot.dispatcher.add_handler(LeftChatMembersHandler(callback=left_chat_members_cb))

    # Хэндлер для команды "Сообщение закреплено"
    bot.dispatcher.add_handler(PinnedMessageHandler(callback=pinned_message_cb))

    # Хэндлер для команды "Сообщение откреплено"
    bot.dispatcher.add_handler(UnPinnedMessageHandler(callback=unpinned_message_cb))

    # Хэндлер для редактирования сообщения
    bot.dispatcher.add_handler(EditedMessageHandler(callback=edited_message_cb))

    # Хэндлер для удаления сообщения (ОТКЛЮЧЕН, НЕ ИСПОЛЬЗОВАТЬ)
    bot.dispatcher.add_handler(DeletedMessageHandler(callback=deleted_message_cb))

    # Хэндлер для упоминания ботом
    bot.dispatcher.add_handler(MessageHandler(
        filters=Filter.message & Filter.mention(user_id=bot.uin),
        callback=message_with_bot_mention_cb
    ))

    # Хэндлер для упоминания пользователем
    bot.dispatcher.add_handler(MessageHandler(
        filters=Filter.mention() & ~Filter.mention(user_id=bot.uin),
        callback=mention_cb
    ))

    # Хэндлер для текста без файлов
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.text, callback=message_cb))

    # Хэндлер с регулярным выражением: только цифры
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.regexp("^\d*$"), callback=regexp_only_dig_cb))

    # Хэндлер для немедийного файла (например, MarkFomin.txt)
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.data, callback=file_cb))

    # Handlers for other file types
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.image, callback=image_cb))
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.video, callback=video_cb))
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.audio, callback=audio_cb))

    # Хэндлер для стикера
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.sticker, callback=sticker_cb))

    # Хэндлер для ссылки
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.url & ~Filter.sticker, callback=url_cb))

    # Хэндлеры для пересылания и ответа на сообщение соответственно
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.forward, callback=forward_cb))
    bot.dispatcher.add_handler(MessageHandler(filters=Filter.reply, callback=reply_cb))

    # Команда /pin закрепляет сообщение по его msgId:
    # /pin 6752793278973351456
    # 6752793278973351456 - msgId
    # Хэндлер для команды
    bot.dispatcher.add_handler(CommandHandler(command="pin", callback=pin_cb))

    # Команда /unpin открепляет сообщение по его msgId:
    # /unpin 6752793278973351456
    # 6752793278973351456 - msgId
    # Хэндлер для команды
    bot.dispatcher.add_handler(CommandHandler(command="unpin", callback=unpin_cb))

    # Запускаем получение событий с сервера ICQ
    # ---------------------------------------------------------------------------------------- #
    bot.start_polling()

    # Методы, которые можно использовать в библиотеке:
    # -------------- #
    # Информация о боте
    bot.self_get()

    # Отправка сообщений
    response = bot.send_text(chat_id=OWNER, text="Привет")
    msg_id = response.json()['msgId']

    # Ответ на сообщение
    bot.send_text(chat_id=OWNER, text="Ответ на 'Привет'", reply_msg_id=msg_id)

    # Переслать сообщение
    bot.send_text(chat_id=OWNER, text="Пересылаю 'Привет'", forward_msg_id=msg_id, forward_chat_id=OWNER)

    # отправка файла
    with io.StringIO() as file:
        file.write(u'x'*100)
        file.name = "file.txt"
        file.seek(0)
        response = bot.send_file(chat_id=OWNER, file=file.read(), caption="binary file caption")
        file_id = response.json()['fileId']

    # Инофрмация об отправленном файле
    bot.get_file_info(file_id=file_id)

    # Повторно отправить файл
    bot.send_file(chat_id=OWNER, file_id=file_id, caption="file_id file caption")

    # Также можно отправить повторно файл ответом на сообщение
    bot.send_file(chat_id=OWNER, file_id=file_id, caption="file_id file caption", reply_msg_id=msg_id)

    # Переслать файл по его идентификатору
    bot.send_file(
        chat_id=OWNER,
        file_id=file_id,
        caption="file_id file caption",
        forward_msg_id=msg_id,
        forward_chat_id=OWNER
    )

    # Отправить TTS файл
    if sys.version_info[0] == 3:
        with io.BytesIO() as file:
            gTTS('Перевод выполнен Марком Фоминым в 2021 году.').write_to_fp(file)
            file.name = "hello_voice.mp3"
            file.seek(0)
            response = bot.send_voice(chat_id=OWNER, file=file.read())
            hello_voice_file_id = response.json()['fileId']

        # Отправка файла POST-запросом по его идентификатору
        bot.send_voice(chat_id=OWNER, file_id=hello_voice_file_id)

    # Редактирование текста, уже отправленного ботом
    msg_id = bot.send_text(chat_id=OWNER, text="Это сообщение будет отредактировано").json()['msgId']
    bot.edit_text(chat_id=OWNER, msg_id=msg_id, text="Все, его уже отредактировали.")

    # Удалить сообщение пользователя
    msg_id = bot.send_text(chat_id=OWNER, text="Сообщение будет удалено.").json()['msgId']
    bot.delete_messages(chat_id=OWNER, msg_id=msg_id)

    # Пусть бот будет печатать в течение 1 секунды
    bot.send_actions(chat_id=OWNER, actions=["typing"])
    sleep(1)
    # Пусть бот перестанет печатать
    bot.send_actions(chat_id=OWNER, actions=[])

    # Информация о чате
    bot.get_chat_info(chat_id=TEST_CHAT)

    # Получить список админов чата
    bot.get_chat_admins(chat_id=TEST_CHAT)
    # Поулчить список участников чата
    bot.get_chat_members(chat_id=TEST_CHAT)
    # Получить список удаленных участников
    bot.get_chat_blocked_users(chat_id=TEST_CHAT)
    # Получить список ожидающих подтверждения на вход
    bot.get_chat_pending_users(chat_id=TEST_CHAT)

    # Заблокировать пользователя в чате
    bot.chat_block_user(chat_id=TEST_CHAT, user_id=TEST_USER, del_last_messages=True)
    # Разблокировать пользователя в чате
    bot.chat_unblock_user(chat_id=TEST_CHAT, user_id=TEST_USER)

    # Принять решение о подтверждении/отклонении заявки на вход в группу
    bot.chat_resolve_pending(chat_id=TEST_CHAT, approve=True, user_id=TEST_USER, everyone=False)

    # Установить название чата
    bot.set_chat_title(chat_id=TEST_CHAT, title="Захват мира")
    # Установить инофрмацию о группе
    bot.set_chat_about(chat_id=TEST_CHAT, about="Группа для душевного общения.")
    # Установить правила группы
    bot.set_chat_rules(chat_id=TEST_CHAT, rules="Не ругайтесь матом и не обзывайте участников чата!)")

    # Отправить сообщение с кнопками
    bot.send_text(chat_id=OWNER,
                  text="Привет, я сообщение с кнопками!",
                  inline_keyboard_markup="[{}]".format(json.dumps([
                      {"text": "Кнопка 1", "url": "https://vk.com/na_official/"},
                      {"text": "Кнопка 2", "callbackData": "call_back_id_2"},
                      {"text": "Кнопка 3", "callbackData": "call_back_id_3"}
                  ])))
    '''
    url - используется для ссылки, не может быть передано одновременно с callbackData;
    callbackData - используется для обработки нажатия кнопки
    '''

    # Хэндлер для обработки нажатия кнопки
    bot.dispatcher.add_handler(BotButtonCommandHandler(callback=buttons_answer_cb))

    bot.idle()