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()
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()