Kickchatmember telegram как применять
В настоящее время существует достаточно много разных популярных мессенджеров. Достоинством мессенджера Telegram является наличие богатого API, позволяющего взаимодействовать с мессенжером не людям, а программам, то есть писать боты.
Можете изучить полную документацию на Telegram Bot API, но непосредственно этим API мы пользоваться не будем. Но нужно понять, как это устроено внутри.
Самый простой пример тестовой страницы, которую можно загрузить при помощи API:
- Название бота (произвольное текстовое имя),
- Имя пользователя для бота (уникальное, из латинских букв, цифр, символа подчёркивания, должно заканчиваться на bot ).
В ответ вы получите от @BotFather токен.
Дальнейшее описание Telegram Bot API не нужно для выполнения заданий (т.к. мы будем использовать упрощающую разработку ботов библиотеку), но полезно для понимания.
Пример простого запроса getMe для проверки токена, который можно просто ввести в адресную строку браузера, заменив <token> на токен вашего бота:
В ответ вы должны получить небольшой JSON с информацией о вашем боте.
Библиотека pytelegrambotapi (telebot)
Её необходимо установить при помощи pip, в pip она называется pytelegrambotapi. Соответствующая консольная команда может выглядеть, например, так:
Сразу же установите библиотеку requests, она пригодится для выполнения ряда заданий.
Немного более подробно ознакомиться с написанием простейших ботов можно, например, в следующих статьях:
Как сдавать задачи в этом листке
В этих заданиях необходимо разработать бота для Telegram с использованием модуля telebot.
A: Бот, отвечающий односложно
Напишите бота, который на все предложения отвечает односложно. Например, пишет в ответ “Привет!”
B: Приветствие по имени
C: Бот-калькулятор
Напишите бота, который вычисляет значение выражения, которое ему прислали. Например, если написать боту 2 + 2 , он должен ответить 4 .
Для этого нужно использовать функцию eval , вычиcляющую переданное ей выражение в виде строки. Например, eval('2 + 2') вернёт число 4.
Проблема возникает в том, что пользователь может передать некорректное выражение, при вычислении которого функция упадёт. Тогда вам поможет обработка исключений, которая выглядит примерно так:
Подробней про обработку исключений в Python можно прочитать, например, здесь.
Модуль requests для запросов из интернета
Чтобы получить данные с удалённого сайта есть несколько способов, самый простой — библиотека requests. Смотрите документацию на библиотеку, простой пример использования, а также можно сразу же распарсить полученный JSON.
D: Бот-цитатник
E: Конвертер валют
Напишите бота, который мог бы переводить любую сумму любой поддерживаемой валюты в любую другую поддерживаемую валюту. Не забудьте про российский рубль, его курс в этом документе не указан!
F: Цитаты на заданную тему
Для этого у API есть метод quotes (List Quotes), который выдаёт список всех цитат. Этому методу можно передать параметр filter , со значением — слово, по которому осуществляется поиск, и параметр type=tag , чтобы осуществлять поиск по тегам, а не по всем текстам цитат.
Обратите внимание, что если цитат, удовлетворяющих условию, много, то API выдаёт только 25 из них. Чтобы получить больше цитат (они выдаются страницами по 25 штук), нужно задать параметр page , равный номеру страницы.
Всё, что здесь описано, передаётся при помощи параметров GET запроса. Примеры запросов можете посмотреть в документации на API.
Но использовать функцию quotes вы можете только при наличии токена. Для этого нужно зарегистрироваться на сайте и получить бесплатно токен (они называются API keys). Токен — это строка из 32 hex-символов. Токен нужно передавать (см. раздел Authorization в API) при помощи дополнительного параметра “Authorization” в параметрах GET-запроса. Это можно сделать при помощи той же библиотеки requests , посмотрите на пример Custom Headers в документации.
Наконец, вы должны реализовать кэширование запросов. То есть если бот один раз получил список всех цитат на какую-то тему, то можно ожидать, что пользователь захочет получить ещё одну цитату на эту же тему. Чтобы не получать снова цитаты через API, необходимо сохранять все цитаты по этой теме, а при повторном запросе — выдавать одну цитату из сохранённых.
- Получить API key.
- Научиться делать запросы с использованием API key (любые, лишь бы работала авторизация).
- Научиться делать запросы с поиском по тэгу.
- Реализовать загрузку всех цитат с учётом пагинации. До сих пор вам на самом деле не нужен никакой бот, удобней написать простое приложение, которое будет делать необходимые запросы и выдавать результат на стандартный вывод.
- Теперь облачаем это в форму бота, кэшируя полученные цитаты в словаре.
Реализация клавиатуры
Команды, набираемые пользователем, сложно декодировать, да и пользователь может ошибиться в их написании. Поэтому в Телеграме у ботов есть возможность использования клавиатуры для выбора стандартных действий пользователя. Есть два типа клавиатуры: ReplyKeyboardMarkup (более древняя) и InlineKeyboardMarkup (более современная и богатая возможностями), на второй и остановимся.
Теперь нам необходимо сделать обработчики кнопок. Это отдельные функции, которые необходимо зарегистрировать при помощи декоратора callback_query_handler . Эта функция будет получать объект callback_obj , которых хранит информацию о нажатии кнопки. В частности, помимо обычных данных о пользователе, чате и т.д. у этого объекта есть поле data , в котором хранится та самая информация, которая была привязана к кнопке. Пример такого обработчика:
Обратите внимание на вызов метода answer_callback_query . Он сообщает серверу телеграма, что обработка данного callback-запроса завершена. Если этот метод не вызвать, то на кнопке будут изображены часики, а сама кнопка будет недоступна для повторного нажатия.
Есть и другой способ определить, какая кнопка была нажата. Обратите внимание на параметр декоратора: func=lambda call: True . Это лямбда-функция, которая в данном случае всегда возвращает True . Это означает, что данный обработчик будет применяться ко всем callback-запросам. Но если эта функция будет возвращать не всегда True , то так можно установить обработчик для отдельных callback-запросов, а именно, будет вызван тот обработчик, для которого эта функция вернёт True .
Используем это для того, чтобы сделать разные обработчики для разных кнопок.
G: Расписание уроков
Выбор дня недели реализуйте при помощи клавиатуры.
Вот начало вашего расписание
H: Текущая погода
Напишите бота, который выдаёт текущую погоду для одного из городов. Приложение должно предлагать выбор города при помощи кнопки (должно быть минимум 4 города, минимум из трёх разных часовых поясов, обязательно включая Москву). Также должна быть возможность ввести название города вручную (при этом не гарантируется, что погоду для этого города удастся определить).
I: Конвертер валют-2
Бота, конвертирующего валюты, реализуйте при помощи кнопок. Например, должны быть кнопки “Введите сумму”, “Выберите исходную валюту” “, “Выберите валюту, в которую нужно перевести”. Для выбора валюты отображается меню из кнопок, соответствующих валютам. При вводе суммы нужно обрабатывать любые неправильные введённые данные.
J: Бот, который считает
Напишите бота с двумя кнопками: «+1» и «Сброс». По нажатию на первую кнопку выводится последнее выведенное число, увеличенное на 1, а по нажатию на «Сброс» выводится 0.
Для каждого пользователя ряд чисел должен быть собственным.
K: Камень, ножницы, бумага
Напишите бота, который реализует игру «Камень, ножницы, бумага» для двух игроков (двух пользователей). Пользователю отображаются три кнопки. Бот получает результат нажатия кнопок. Когда два пользователя нажали кнопки, бот сообщает каждому из них имя его противника, что выбрал противник и результат игры (выиграл, проиграл, ничья). То есть при получении ответа от одного пользователя бот запоминает его ход, после получения ответа от второго пользователя, бот сообщает обоим пользователям результат игры и всё начинается заново.
Если второй ответ пришёл от того же игрока, то это считается изменением его предыдущего ответа.
L: Игра ним
В игре ним на столе лежит несколько кучек камней (например, содержащих 3, 4 и 5 камней). Двое игроков по очереди берут по одному или несколько камней из одной кучки. Выигрывает тот, кто взял последний камень.
Стратегия при игре в ним: рассмотрим побитовый XOR количества камней в кучках (например, 3 ^ 4 ^ 5 = 2 ). Если эта величина ненулевая, то позиция выигрышная для ходящего игрока. Если же эта величина нулевая, то позиция проигрышная. Выигрышный ход должен быть таким, чтобы XOR размеров кучек стал нулевым.
Реализуйте бота, который играет в ним с человеком (естественно, у каждого игрока своя сессия), при этом выигрывая (если есть такая возможность).
Библиотека sympy для символьных вычислений
Есть отличная библиотека sympy для символьных вычислений. Вот так в ней можно считать производные:
Если добавить кода, то можно сделать ввод и вывод более удобными:
M: Бот, считающий производную
Сделайте бота, который будет считать производную.
N: Бот, считающий интеграл
По аналогии с производной можно и интегралы считать. Подробности письмом.
Выдача прав боту
Перейдём непосредственно к коду. Дабы упростить себе жизнь, зададим нужные условия срабатывания (нужный ID чата и непустой массив entities) сразу в хэндлер, это сэкономит нам несколько лишних проверок.
Read-Only и прочие «мягкие» наказания
Начиная с Telegram 4.1, у администраторов групп появилась возможность точечно настраивать права и ограничения пользователей. В Bot API за операцию ограничения ответственен метод restrict_chat_member , принимающий на вход ID чата, ID юзера, список ограничений, а также параметр until_date со значением времени (Unix Time), до которого эти ограничения действуют, причём если указать время с разницей меньше 30 секунд или больше 366 дней от текущего, Telegram воспринимает это, как «навсегда». В нашем случае Read-Only режим будет выдаваться на 10 минут, т.е. 600 секунд.
Давайте теперь разберёмся, на каком языке отвечать пользователю. В объекте User есть поле language_code , содержащее языковую метку пользователя. Не всё так просто, ведь в зависимости от настроек системы и местоположения пользователя, его языковая метка может быть ru , en-GB , en-US или вообще какой-нибудь nan-Hant-TW . Подробно о строении таких меток можно прочесть здесь. В нашем случае задача немного упрощается, т.к. нам нужен только первый элемент (сам язык), независимо от региона (будем считать, к примеру, что «английский» английский и американский английский для нас одинаковы). Напишем наипростейшую определялку языка, которая будет возвращать ru для русского языка и en для всех остальных. В реальной жизни, конечно, стоит сделать поддержку большего числа языков.
И подготовим небольшой JSON со строками:
Теперь напишем обработчик, который будет реагировать на набор фраз, выдавать режим Read-Only пользователю на 10 минут и уведомлять его на родном языке. Не забудьте импортировать метод time из одноимённого модуля!
Запустим бота и попросим людей с разными language_code выступить в роли противников мяса:
Бот-полиглот
Заключение
Для любого бизнеса важно установить канал общения с клиентами. Но сделать это не так просто. Психология людей такова, что они не хотят захламлять память своего смартфона новым фирменным приложением из того места, которое они посетили. Совсем другое дело — чат-бот. Ненавязчивый и дружелюбный. А кроме того — со всеми необходимыми фишками: рекламными акциями, скидками и быстрым заказом. И уведомления в одном единственном удобном мессенджере. Почему бы его не реализовать в своем бизнесе? Тем более, что это не так сложно, как вы думаете.
Сегодня мы поговорим о ботах и их API ( telegram api ) на базе популярного мессенджера Telegram.
Содержание
Telegram Bot API и Telegram API
Все началось с того, что Николай Дуров совместно с командой программистов создал криптографический протокол. Его движок задействовал комбинацию симметричного шифрования AES , протокол Диффи-Хеллмана для обмена ключами шифрования между клиентами и ряд хеш-функций. На основе этого протокола был построен MTProto — механизм, позволяющий пользователям сегодня использовать Telegram-мессенджеры.
На данный момент есть два основных инструмента API, с помощью которых можно задействовать сервисы Telegram — Telegram Bot API и Telegram API . Первый служит для разработки чат-ботов, второй позволяет делать полностью кастомные Telegram-клиенты. Разработчикам также доступна открытая библиотека TDLib (Telegram Database Library), с помощью которой можно создавать свою версию мессенджера с уникальными опциями (как например, Telegram X, построенный именно на TDLib). Telegram Bot API является надстройкой над Telegram API , поэтому пользоваться Bot API можно без знаний о механизме используемого протокола MTProto .
Принцип работы любого бота заключается в том, что он перманентно направляет запросы на сервер и регулярно получает обновления. Получать их можно двумя способами. Во-первых, можно использовать вебхуки, когда сервер делает обратный вызов на указанный URL. А во-вторых, можно просто « забрасывать » запросами Telegram, получая постоянные ответы.
BotFather: быстрый Start
Чтобы приступить к созданию собственного бота, необходимо получить токен для авторизации и подключения через API. Делается это при помощи служебного бота. Введите в поиске Telegram его имя — BotFather. Далее следует выбрать команду /newbot и дать имя боту.
Затем BotFather спросит вас имя, которое обязательно должно заканчиваться на bot , например, shop_serge_bot . Далее для бота будет сгенерирован уникальный токен, который будет выглядеть примерно так — 2093336709:AAGiH64Ec1R8r222sM9IywvlIGFkb7wFqyo .
Всего можно генерировать не более 20 ботов на одного пользователя. Управление ботами также происходит через меню команд служебного бота BotFather. Например, если вам потребуется настроить какой-то из ваших ботов, вы должны перейти по командам / mybots и затем нажать на кнопку Edit Bot . Здесь вы сможете настроить имя — Edit Name и указать описание — Edit Description .
В меню настроек BotSettings включается режим встроенных запросов (по умолчанию эта опция отключена). Когда встроенные запросы активированы, пользователи могут вызвать вашего бота, просто введя имя пользователя в поле для ввода текста в любом чате, группе или канале.
Если Telegram использовать в коммерческих целях, чат-бот можно вооружить средствами для приема платежей. Стоит обратить внимание, что сам Telegram не занимается проведением транзакций, он лишь дает возможность подключить услуги длинного списка провайдеров.
В их числе такие платежные системы, как Stripe, YooMoney, Сбербанк, PayMaster, PSB, Tranzzo, Payme, CLICK, LiqPay, Portmone, Paymega, ECOMMPAY и др. Разумеется, чтобы использовать эти платежные системы, нужно быть юридическим лицом.
aiogram — асинхронная библиотека
pip install -U aiogram.
Создаем эхо-бот
Создаем конфигурационный файл config.py и указываем в нем значение, сгенерированное ботом BotFather. Приступаем к написанию кода самого чат-бота.
Для начала импортируем конфигурацию и систему логирования. Затем подключаем все необходимые модули из aiogram . Указываем уровень логирования, а затем инициализируем бота, создав две переменные — Bot и Dispatcher .
Как уже говорилось ранее, обработка событий в Telegram может происходить двумя способами — long polling , когда мы со своей стороны постоянно запрашиваем сервер, а второй вариант — более мощное и быстрое решение вебхук . Реализация long polling на Linux имеет большой минус — бот часто зависает и его приходится постоянно перезапускать.
Если вы делаете бота, который работает с деньгами или какой-то конфиденциальной информацией, то параметр skip_updates лучше устанавливать в значение Falsе — тогда обработчик не будет пропускать старые события и будет обрабатывать их в любом случае. Если этого не делать, существует вероятность, что какая-нибудь важная транзакция может потеряться и возникнет потенциальная угроза безопасности (или коллизия).
Оформление: кнопки и текст
Например, URL button — простая кнопка со ссылкой на какой-то веб-ресурс. Вариант кнопки Callback запрашивает обновление. Она может применяться, скажем, для уведомлений или предупреждений (с окном notification или окном alert ). Кнопка для перехода в режим инлайн может открывать меню для выбора чата.
Другой тип кнопок — клавиатурный. Он дают возможность использовать подсказки бота. Например, они могут содержать наиболее частые запросы, ожидаемые от пользователя ( « как к вам проехать » , « время работы » и т.д.)
Один из примеров такой клавиатуры — бот в кафе для дистанционного принятия заказов:
Инструмент для оформления текста выбирается аргументом функции parse_mode .
Используя модуль markdown из aiogram.utils по ходу текста можно менять форматирование. Тип форматирования определяется функцией с дописанной к ней букве h , которая означает поддержку HTML.
Учим бот-модерации
Даем возможность бана в группе
Помимо основного кода нам понадобится сделать файл filters.py , который поместим рядом с главным файлом нашего бота:
В коде бота мы его импортируем:
Также необходимо в конфигурационном файле config.py указать id чата ( GROUP_ID ).
Все пользователи Telegram имеют свой id . Он постоянный, и поэтому по нему можно идентифицировать чаты. Если вдруг вы не знаете id , вы можете воспользоваться ботом @username_to_id_bot , который покажет это значение.
В токене бота первая часть — это его id . Например, токен 110301514:AмHdqTcvCG1vGWDxfyeDfSAs0K5PALDsaw принадлежит боту с id 110301514 . В Bot API перед id супергрупп и каналов добавляется -100 (например, id 1322414430 превращается в -1001322414430 ).
Заключение
Более сложные боты обладают искусственным интеллектом и умеют использовать нейронные сети. Возможности таких чат-ботов ограничены только вашей фантазией, но об этом — в следующий раз. А пока посмотрите дополнительное видео по технике создания ботов на JavaScript для Telegram API :
Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .
Хоть и с большим запозданием, публикую шпаргалку по telegram bot api, может, будет полезна.
Прикладываю официальную документацию, и готовый набор методов для работы с telegram. Обработку тестировал на 8.3.15.1747.
В тексте я буду давать ссылки на вторую документацию т.к. для ее просмотра не нужны премудрости для обхода блокировок.
В клиенте telegram ищем бота BotFather
Далее отправляем ему команды
/start
/newbot
Представление имени моего бота
unikalnoe_imya_bot
После этого бот выдаст нам данные для подключения, а именно токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
Скринами
Соединение
В документации написано:
Код создания соединения :
Прокси
Есть огромное количество сайтов предоставляющий список таких бесплатных прокси, я использую getMe
Я специально буду повторять блоки кода, дабы Вы копировали сразу рабочий вариант, конечно это все нужно обернуть в функции и процедуры
Метод getMe вернет в теле ответа JSON структуру
"ok":true - Означает, что авторизация прошла успешно и Ваш токен валидный.
Short polling - это классическая схема, когда отправляя запрос мы сразу получаем результат его выполнения.
т.е. вы заводите РС с обработанными update_id и каждый раз анализируете - обработан полученный id или нет. Можно завести константу с последним обработанным update_id и сравнивать ее на < или > с полученным
Для работы в такой схеме необходимо договориться с сервером - какой таймаут считать допустимым, для этого у метода
Для переключения режима обмена на вебхуки существует метод InlineKeyboardMarkup
Загрузка полученных файлов
Для этого существует GET-метод
Ответ сервиса getFile
При этом запросе сервер ответит, что все Ок
Показ привью отправленной ссылки можно отключить с помощью параметра disable_web_page_preview
Для этого нужно к запросу добавить строку &disable_web_page_preview=true
Кнопки (клавиатуры)
У метода sendMessage есть еще один очень интересный параметр - reply_markup, который отвечает за быстрые ответы.
Кнопка - это объект InlineKeyboardButton, у которого только одно обязательное поле - text
Есть еще ряд полей, основное из которых - callback_data. Это данные, которые будут отправлены после нажатия кнопки пользователем. Сюда можно записывать идентификаторы из 1С (документа или справочника), числа и т.д. для последующей обработки.
Второй полезный параметр - url, в котором указывается ссылка, которая будет открыта при нажатии на кнопку
Пример JSON-описания клавиатуры
KeyboardButton с основным полем text, данный объект можно не использовать и сразу формировать массив строк.
Еще один важный параметр клавиатуры, но не обязательным, является resize_keyboard, который отвечает за "авто высоту" кнопок.
По умолчанию данный параметр установлен в false и клавиатура растягивается на высоту основной клавиатуры, что выглядит громоздко (см. скрин в примере).
Еще один опциональный параметр - one_time_keyboard, который при установке в true скрывает клавиатуру после нажатия кнопки.
ReplyKeyboardHide - Своего рода команда управления видимостью для клавиатуры
Отправка контактов
Метод похож на sendMessage за исключением нескольких обязательных полей:
phone_number - строковое представление телефонного номера
first_name - Имя контакта
Отправка документов (файлов)
За отправку файлов отвечает POST-метод
Со строковыми значениями вопросов не возникает - делаем СтрЗаменить и все, но есть еще и содержимое файла, которое нужно в итоговый запрос подсунуть.
Для решения этой проблемы у 1С есть метод ОбъединитьФайлы, который объединяет переданный в него массив файлов в один.
Разделим шаблон на части - певая это текст до %СодержимоеФайла%, а вторая это текст после %СодержимоеФайла%. Запишем эти 2 текста в файлы и используем ОбъединитьФайлы подсунув между текстовиками отправляемый файл.
Читайте также: