Приглашаю присоединиться ко мне в следующих сервисах:

Бот с анекдотами в телеграмм


Лучшие каналы жанра «Юмор и развлечения» для Telegram

Сообщество КБ

Двач, новости и мемы

The greatest community in Europe?

Официальный канал сообщества ЯП (http://www.yaplakal.com). Лучшее с сайта, мемесы и видосы, жара и годнота. Не пропусти!

Собираем наиболее интересное сообщества Пикабу и публикуем раз в сутки. Официальный канал сообщества Пикабу.

Все самое свежее и актуальное непосредственно с reddit

Пасты и отборный контент

Если вы яжматерь, моралфаг, школота или просто впечатлительный человек, то бегите скорей отсюда на хуй.

Сотрудничество и реклама: @godblessmdk

Мы - боги годных видосов, тебе к нам

Родителей не выбирают!

Русский вестник реддита. Лучшее с "главной страницы интернета

Сборник юморных анекдотов и смешных историй ?

Top memes Мы в VK https://vk.cc/4W7wni

Канал паблика Че

Вечное сияние чистого скатывания

Твой Бывший

Лучшие анекдоты

Основной канал - @dvachannel Бот-предложка - @dvachmeme_bot Видосы - #webm

Сливаем ваше время в /dev/null — развлекаем программистов

Здесь говорят о тебе ,) Официальное представительство в Telegram ?

Канал, где можно найти смешные и трешовые видео, картинки, гифки, все что вы любите.

Telega Channel - Лучшие мемы у нас!

Всякая херня, режим работы 9:00 AM — 02:00 AM EST. По всем вопросам пишите @userpig (а лучше не пишите)

игры, работа, общение — Соцсети на vc.ru

Чтобы начать работу с ботом, достаточно найти его по имени через поиск и вступить с ним в переписку. Для общения используются специальные команды (например, /start), однако у разработчиков также есть возможность подключить отдельную клавиатуру с определённым набором заготовленных действий.

PollBot (@pollbot)

Позволяет создавать опросы для участников чата и задавать варианты ответов.

Hangbot (@hangbot)

Игра «Виселица» — игрок угадывает слово по одной букве, имея при этом ограниченное число попыток.

RateStickerBot (@ratestickerbot)

Бот для оценки новых стикеров.

TriviaBot (@triviabot)

Игра-викторина. Есть аналоги и на других языках, например, @buktopuhabot на русском.

FoodBot (@foodsearchbot)

Бот, позволяющий найти заведения поблизости.

Wolfram Alpha (@wolframbot)

Поисковик по базе знаний Wolfram Alpha, распознающей запросы на естественном языке.

movie (@movie_bot)

Простой способ выбрать фильм на вечер — достаточно определиться с жанром.

Chuck Norris Jokes (@chuckbot)

Бот присылает случайно выбранные шутки про Чака Норриса — можно вставить в них своё имя.

MISIS Books (@misis_bot)

Позволяет искать учебные материалы в библиотеке Национального исследовательского технологического университета «МИСиС».

GrammarNaziBot (@grammarnazibot)

Проверяет грамотность присланного ему текста. Также бота можно добавить в общий чат, тогда он будет указывать на ошибки каждого из участников.

Fucking Great Advice (@fuckinggreatadvicebot)

Присылает случайно выбранный совет из базы известного сайта.

VKBot (@vk_bot)

Интеграция с «ВКонтакте» — позволяет искать по списку друзей, музыке и видео, группам и фотографиям.

StrangerBot (@strangerbot)

Сводит знакомство со случайно выбранным человеком.

Hot Or Bot (@hotorbot)

Аналог Tinder — позволяет оценивать фотографии людей, находящихся неподалёку.

GitHub (@githubbot)

Интеграция с сервисом для совместной работы над кодом Github.

Files Bot (@filesbot)

Бот для работы с файлами — умеет хранить и делиться документами с другими польз

Как создавать ботов в Telegram / Habr

24 июня разработчики Telegram открыли платформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов.

Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.

Рассмотрим API на примере создания тривиального бота:

1. Регистрация


Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот — @BotFather.

Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.

Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.

Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/getMe, говорят, не всегда работает с первого раза.

2. Программирование


Создавать бота буду на Python3, однако благодаря адекватности этого языка алгоритмы легко переносятся на любой другой.

Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)

Каркас бота:

URL = "https://api.telegram.org/bot%s/" % BOT_TOKEN MyURL = "https://example.com/hook" api = requests.Session() application = tornado.web.Application([ (r"/", Handler), ]) if __name__ == '__main__': signal.signal(signal.SIGTERM, signal_term_handler) try: set_hook = api.get(URL + "setWebhook?url=%s" % MyURL) if set_hook.status_code != 200: logging.error("Can't set hook: %s. Quit." % set_hook.text) exit(1) application.listen(8888) tornado.ioloop.IOLoop.current().start() except KeyboardInterrupt: signal_term_handler(signal.SIGTERM, None) 

Здесь мы при запуске бота устанавливаем вебхук на наш адрес и отлавливаем сигнал выхода, чтобы вернуть поведение с ручной выгрузкой событий.

Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.

class Handler(tornado.web.RequestHandler): def post(self): try: logging.debug("Got request: %s" % self.request.body) update = tornado.escape.json_decode(self.request.body) message = update['message'] text = message.get('text') if text: logging.info("MESSAGE\t%s\t%s" % (message['chat']['id'], text)) if text[0] == '/': command, *arguments = text.split(" ", 1) response = CMD.get(command, not_found)(arguments, message) logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response)) send_reply(response) except Exception as e: logging.warning(str(e)) 

Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект Message.

Собственно, её код довольно прост:

def send_reply(response): if 'text' in response: api.post(URL + "sendMessage", data=response) 

Теперь, когда вся логика бота описана можно начать придумывать ему команды.

3. Команды


Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:
def help_message(arguments, message): response = {'chat_id': message['chat']['id']} result = ["Hey, %s!" % message["from"].get("first_name"), "\rI can accept only these commands:"] for command in CMD: result.append(command) response['text'] = "\n\t".join(result) return response 

Структура message['from'] — это объект типа User, она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message['chat']['id'] — в случае личного общения там будет User, а в случае чата — id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.

Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.

После этого можно добавить какую-нибудь свою команду, например, /base64:

def base64_decode(arguments, message): response = {'chat_id': message['chat']['id']} try: response['text'] = b64decode(" ".join(arguments).encode("utf8")) except: response['text'] = "Can't decode it" finally: return response 

Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:

command1 - Description
command2 - Another description
I:
whoisyourdaddy - Information about author
base64 - Base64 decode
BotFather: Success! Command list updated. /help

C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.

4. Свобода


Как можно было заметить, Telegram присылает сообщение целиком, а не разбитое, и ограничение на то, что команды начинаются со слеша — только для удобства мобильных пользователей. Благодаря этому можно научить бота немного говорить по-человечески.

UPD: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<command>) (https://core.telegram.org/bots#privacy-mode)

  • All messages that start with a slash ‘/’ (see Commands above)
  • Messages that mention the bot by username
  • Replies to the bot's own messages
  • Service messages (people added or removed from the group, etc.)

Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность.

Для начала в Handler добавляем обработчик:

if text[0] == '/': ... else: response = CMD["<speech>"](message) logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response)) send_reply(response) 

А потом в список команд добавляем псевдо-речь:
RESPONSES = { "Hello": ["Hi there!", "Hi!", "Welcome!", "Hello, {name}!"], "Hi there": ["Hello!", "Hello, {name}!", "Hi!", "Welcome!"], "Hi!": ["Hi there!", "Hello, {name}!", "Welcome!", "Hello!"], "Welcome": ["Hi there!", "Hi!", "Hello!", "Hello, {name}!",], } def human_response(message): leven = fuzzywuzzy.process.extract(message.get("text", ""), RESPONSES.keys(), limit=1)[0] response = {'chat_id': message['chat']['id']} if leven[1] < 75: response['text'] = "I can not understand you" else: response['text'] = random.choice(RESPONSES.get(leven[0])).format_map( {'name': message["from"].get("first_name", "")} ) return response 

Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.

5. Не текст.


Боты, как и любой нормальный пользователь Telegram, могут не только писать сообщения, но и делиться картинками, музыкой, стикерами.

Для примера расширим словарь RESPONSES:

RESPONSES["What time is it?"] = ["<at_sticker>", "{date} UTC"] 

И будем отлавливать текст :
if response['text'] == "<at_sticker>": response['sticker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC" del response['text'] 

Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:
def send_reply(response): if 'sticker' in response: api.post(URL + "sendSticker", data=response) elif 'text' in response: api.post(URL + "sendMessage", data=response) 

И все, теперь бот будет время от времени присылать стикер вместо времени:

6. Возможности


Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).

Вспоминая статью про умный дом, могу сказать, что теперь извращений меньше, а работа прозрачнее.

7. Ограничения


К сожалению, на данный момент существует ограничение на использование webHook — он работает только по https и только с валидным сертификатом, что, например для меня пока критично за счет отсутствия поддержки сертифицирующими центрами динамических днс.

К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:

while True: r = requests.get(URL + "?offset=%s" % (last + 1)) if r.status_code == 200: for message in r.json()["result"]: last = int(message["update_id"]) requests.post("http://localhost:8888/", data=json.dumps(message), headers={'Content-type': 'application/json', 'Accept': 'text/plain'} ) else: logging.warning("FAIL " + r.text) time.sleep(3) 

P.S. По пункту 7 нашел удобное решение — размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.

UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч 'method': 'sendMessage' (или любой другой метод, используемый ботом).

Документация Telegram: Боты

Боты — специальные аккаунты в Telegram, созданные для того, чтобы автоматически обрабатывать и отправлять сообщения. Пользователи могут взаимодействовать с ботами при помощи сообщений, отправляемых через обычные или групповые чаты. Логика бота контролируется при помощи HTTPS запросов к нашему API для ботов.

Общие сведения

Что могут делать боты?

Вот несколько примеров использования ботов:

  • Интеграция с другими сервисами. Например, бот может отправлять комментарии или управлять «умным домом». Или, например, отправлять вам уведомления при совершении каком-то действия или события (Примеры: GitHub Bot, Image Bot).
  • Утилиты и инструменты. Бот может отображать погоду, переводить тексты или предупреждать о предстоящих событиях по вашему запросу (Например: бот опросов).
  • Одно- и многопользовательские игры. Бот может поиграть с вами в шашки или шахматы, проводить викторины и так далее. (Пример: Trivia bot).
  • Социальные сервисы. Бот может находить вам собеседника, основываясь на ваших общих интересах и увлечениях. (Пример: HotOrBot).
  • Все, что вам захочется. Бота можно запрограммировать для чего угодно. Разве что посуду они помыть не смогут.

Как работают боты?

Как уже было сказано ранее, роботы — особые аккаунты, которые не требуют номера телефона при создании. По сути, эти аккаунты играют роль интерфейса к вашему сервису, который работает на удалённом сервере.

Самое интересное в роботах это то, что для их создания вам не нужно изучать низкоуровневые методы работы с MTProto и шифрованием — общение с роботом организовано при помощи обычного HTTPS интерфейса с упрощёнными методами Telegram API. Мы назвали его Bot API.

Примечание

Рекомендуем также ознакомиться с подробным описанием Bot API.

Как создать бота?

Для этого есть... Бот. Просто напишите пользователю @BotFather и следуйте его инструкциям. Как только вы создали бота и получили свой ключ (токен) авторизации, переходите в раздел документации Bot API, чтобы начать настраивать вашего бота.

Чем бот отличается от обычного аккаунта?

  • У роботов нет статусов «онлайн» и «был в сети», вместо этого отображается надпись «бот».
  • Для ботов выделено ограниченное место на серверах — все сообщения будут удалены по прошествии определённого срока после обработки.
  • Боты не могут сами начать общение с пользователем. Пользователь должен либо добавить робота в группу, либо первым начать с ним диалог. Для этого можно использовать ссылки вида t.me/<bot_username> или поиск по имени пользователя.
  • Имя пользователя у робота должно заканчиваться на «bot» (например, @controllerbot).
  • При добавлении в конференцию, по умолчанию робот не получает всех сообщений (см. режим приватности).
  • Роботы никогда не спят, не едят и не жалуются (если только вы не запрограммируете их на обратное).

Суперспособности

У роботов Telegram есть много уникальных возможностей — например, кастомизированные клавиатуры, дополнительные интерфейсы для команд по умолчанию, внешнее связывание и специальные режимы приватности для групп.

Инлайн-режим

Пользователи могут общаться с вашим ботом напрямую из поля ввода сообщения — из любого чата или группы. Для этого нужно всего лишь набрать имя пользователя вашего бота и запрос для поиска. Получив запрос, бот может возвратить какие-либо результаты. Как только пользователь нажмёт на один из них, он сразу же отправится в чат. Таким образом можно запрашивать контент от бота в чатах, группах или каналах.

Подробнее о встроенном режиме в блоге »

Игры

С помощью ботов пользователи могут играть в HTML5-игры в группах или приватных чатах. Игровая платформа Telegram поможет составить таблицу рекордов и оповещать пользователей об изменении рейтинга.

Под капотом у игр — HTML5, поэтому вы можете создавать игры любой сложности. На данный момент командой Telegram созданы несколько демо-игр:

Подробнее об играх в Telegram »

Клавиатуры

Одна из самых необычных возможностей Bot API — кастомизированные клавиатуры. При передаче сервером ответа есть возможность передать команду на отображение специальной клавиатуры с предустановленными вариантами ответа (см. ReplyKeyboardMarkup). Клиент Telegram, получив сообщение, отобразит пользователю вашу клавиатуру. Нажатие на клавишу сразу же отправит на сервер соответствующую команду. Таким образом можно значительно упростить взаимодействие робота с пользователем. На данный момент для отображения на клавише могут использоваться эмодзи и текст. Вот несколько примеров таких клавиатур:

За более подробной информацией обращайтесь к описанию метода sendMessage.

Команды

Команды представляют собой более гибкий способ общения с ботом. Рекомендуется следующий синтаксис:

/команда [необязательный] [аргумент]

Команда должна начинаться с символа косой черты «/» и не может быть длиннее 32 символов. Команды могут состоять из букв латинского алфавита, цифр и подчёркивания. Несколько примеров:

/get_messages_stats /set_timer 10min Alarm! /get_timezone London, UK

Сообщения, начинающиеся с косой черты, будут всегда доставляться боту (точно также, как и при ответе на его сообщения и на &commat;упоминания бота в чате). Приложения Telegram будут:

  • Предлагать список поддерживаемых команд с их описанием, когда пользователь введёт символ косой черты «/» (чтобы этот пункт работал, вам необходимо задать описание команд у @BotFather). Нажатие на описание приведёт к отправке этой команды.
  • Показывать кнопку (/) в поле ввода текста во всех чатах с ботами. Нажатие на эту кнопку отобразит список доступных команд.
  • Подсвечивать /команды в сообщениях. При нажатии на такую подсвеченную команду, она будет сразу же отправлена боту.

Если в группе есть несколько ботов, вы можете дописать после команды имя бота, чтобы избежать коллизий в общих командах:

/[email protected] /[email protected]

Это происходит автоматически, если вы выбираете команду из списка доступных.

Глобальные команды

Чтобы пользователям было проще работать с ботами, мы просим всех разработчиков реализовывать поддержку нескольких простых команд. В интерфейсе приложений Telegram будут ярлыки (быстрые ссылки) для этих команд.

  • /start — начинает общение с пользователем (например, отправляет приветственное сообщение). В эту команду также можно передавать дополнительные аргументы (см. внешнее связывание).
  • /help — отображает сообщение с помощью по командам. Оно может представлять собой короткое сообщение о вашем боте и список доступных команд.
  • /settings — (по возможности) возвращает список возможных настроек и команды для их изменения.

При попытке начать общение с роботом, пользователь увидит кнопку СТАРТ. На странице профиля бота также будут доступны ссылки Помощь и Настройки.

Режим приватности

Ботов часто добавляют в группы, чтобы получать различную информацию — новости, уведомления и т.д. Однако, при добавлении бота вы наверняка спрашивали себя: «А что если этот маленький засранец пересылает всю групповую переписку куда-то »налево“?» Именно поэтому у роботов есть режимы приватности.

Робот с включенным режимом приватности не будет получать всех сообщений, а только сообщения, удовлетворяющие этим условиям:

  • Сообщения, начинающиеся с символа косой черты "/" (см. раздел Команды)
  • Сообщения, содержащие @упоминание бота
  • Ответы на сообщения бота
  • Служебные сообщения (о добавлении пользователя, смены изображения группы и т.д.)

Это хорошо со всех сторон: во первых, некоторые люди будут спать спокойно (в своих шапочках из фольги), не опасаясь, что их будут прослушивать. Во-вторых, режим приватности избавляет разработчиков от необходимости обрабатывать сотни ненужных сообщений из групповых чатов.

Режим приватности включен по умолчанию во всех ботах. Он может быть выключен - тогда бот начнёт получать все сообщения, как и обычный пользователь. Всем участникам конференции виден текущий статус режима приватности в списке участников группы.

Мы рекомендуем отключать режим приватности только в случаях крайней необходимости. В подавляющем большинстве случаев, запроса принудительного ответа на сообщение бота будет достаточно.

Внешнее связывание

Боты имеют механизм внешнего связывания, которые позволяет передать дополнительные параметры при запуске. Например, для передачи авторизационного токена пользователя, чтобы соединить его аккаунт с каким-либо внешним сервисом.

У каждого робота есть ссылка, при помощи которой можно начать с ним диалог — https://t.me/<имя бота>. К этой ссылке можно добавить параметры *start или startgroup со значением длиной до 64 символов. Пример:

https://t.me/triviabot?startgroup=test

Допустимо использование символов A-Z, a-z, 0-9, _ и -. Мы рекомендуем использовать base64url для кодирования параметров.

Переход по ссылке с параметром start начнет чат с ботом, при этом в поле ввода текста будет отображаться кнопка СТАРТ. При переходе по ссылке с параметром startgroup пользователю будет предложено добавить бота в одну из доступных групп. Как только пользователь подтвердит своё действие (нажмёт на кнопку СТАРТ или выберет группу), бот получит сообщение следующего формата:

/start PAYLOAD

В PAYLOAD будет значение параметра start или startgroup, который был передан в ссылке.

Пример реализации внешнего связывания

Предположим, сайт example.com хочет отправлять пользователю уведомления с помощью Telegram-бота. Ниже приведено описание последовательности действий для реализации отправки уведомлений пользователю с ID 123.

  1. Создайте бота с любым именем, например, @ExampleComBot
  2. Настройте вебхук для входящих сообщений
  3. Сгенерируйте ключ достаточной длины, напр. $memcache_key = 'TESTKEY'
  4. Запишите значение 123 с ключом $memcache_key в Memcache на 3600 секунд (один час)
  5. Отправьте пользователю ссылку https://t.me/ExampleComBot?start=TESTKEY
  6. Настройте обработчик веб-хуков так, чтобы он запрашивал в Memcached значение входящего параметра каждый раз, когда приходит сообщение, начинающееся со /start. Если ключ существует, записываем chat_id, переданный в веб-хук, в telegram_chat_id для пользователя 123. Удаляем ключ из Memcache.
  7. Теперь, если мы хотим отправить сообщение пользователю 123, сначала проверяем telegram_chat_id. Если оно существует, используем метод sendMessage, чтобы отправить пользователю сообщение.

BotFather

BotFather — один бот, чтобы править всеми. При помощи него меняются настройки у существующих ботов и создаются новые.

Создание бота

Напишите команду /newbot, чтобы создать нового робота. BotFather спросит у вас имя нового бота и предложит придумать username.

Имя (name) будет отображаться в контактах и чатах.

Username — короткое имя на латинице, которое используется для упоминаний бота и в ссылках на профиль в telegram.me. Username должен состоять из букв латинского алфавита, подчёркиваний и цифр и быть длиной от 5 до 32 символов. Также имя пользователя обязательно должно заканчиваться на «bot», например: «tetris_bot» или «TetrisBot».

Ключ (токен) это набор символов вида 110201543:AAHdqTcvCh2vGWJxfSeofSAs0K5PALDsaw, который нужен, чтобы получать и отправлять сообщения с помощью Bot API.

Создание токена

Если вы потеряли или утратили доступ к токену, отправьте команду /token, чтобы сгенерировать новый.

Настройки

  • /setname — Изменить имя робота.
  • /setdescription — Изменить описание робота, представляющее собой короткий текст с описанием бота. Пользователи увидят его в самом начале, под заголовком «Что умеет этот робот?».
  • /setabouttext — Изменить информацию о боте, ещё более короткий текст, отображающийся в профиле бота. Ещё, если кто-то поделится вашим ботом, то вместе со ссылкой на него отправится этот текст.
  • /setuserpic — Изменить аватарку бота. Картинки — всегда хорошо.
  • /setcommands — Изменить список команд бота. Каждая команда состоит из собственно командного слова, начинающегося с символа косой черты («/») и короткого описания. Пользователи увидят список команд при вводе символа «/».
  • /setjoingroups — Определяет, можно ли добавлять вашего бота в группы.
  • /setprivacy — Определяет, все ли сообщения видит ваш бот в группах. В выключенном состоянии роботу будут отправляться все сообщения.
  • /deletebot — Удалить бота и его имя пользователя.
Совет

Пожалуйста, имейте в виду, что для применения настроек на сервере, возможно, потребуется некоторое время.

Очень простой чат-бот для Telegram для самых маленьких / Rusonyx corporate blog / Habr

Есть 100500 способов и инструментов создать простого serverless чат-бота для телеграм. А наш все-равно будет проще, хотя бы по числу кликов в интерфейсе. Сам бот будет написан на Python, а выполнятся будет на serverless движке Swifty.

Как и всегда в наших гайдах, никаких особых знаний питона или других языков программирования вам не потребуется. Нужно лишь умение запустить кое-что в командной строке. Если вы находитесь в России, то еще и VPN на вашем компьютере, так как потребуется достучаться до сервера телеграм.

Пока все стандартно — зарегистрируйте бота


Чтобы создать нового бота, нужно попросить другого бота это сделать. Откройте телеграм и найдите там бота @BotFather или откройте ссылку. Далее, наберите /newbot и следуйте инструкциям БотПапы. Для минимальной настройки вам нужно только дать боту display name и username. После создания бота вам будут выданы access token и URL. Сохраните их где-нибудь.

Бот


Для начала вам нужно зарегистрироваться в Swifty — нашей серверлесс платформе. Сделать это можно здесь. Затем зайдите в панель управления и сделайте следующее:
  1. Нажмите Functions -> New Function. Перейдите на вкладку From repo (Templates) и выберите репозиторий github.com/swiftycloud/swifty.demo, если он не выбран по-умолчанию. Это наш собственный репозиторий, в котором мы храним шаблоны функций.
  2. Выберите шаблон Simple Telegram Chatbot (python) и нажмите Next.
  3. Введите имя своего бота, например, swifty_bot (далее я буду использовать это название для ее обозначения) и нажмите Create.

Чтобы телеграм мог позвать функцию бота, нужно создать ей API ссылку. Перейдите на вкладку Triggers, нажмите Add Trigger -> REST API (URL). Сохраните получившуюся ссылку.

Затем, вам нужно дать функции бота доступ к access token, который вы получили от telegram. В Swifty есть специальная сущность — Account, которая позволяет безопасно хранить любые данные, например, связки логин-пароль или токены.

  1. Выберите Accounts -> Create Account. Используйте тип Telegram API, имя SWIFTYBOT (именно в uppercase) и токен, который вы получили от telegram.
  2. Выберите Functions -> swifty_bot -> Access -> Add. Выберите Accounts и аккаунт SWIFTYBOT. Теперь ваша функция имеет безопасный доступ к вашему access token.

Update. Обратите внимание! Имя SWIFTYBOT для аккаунта прописано в коде функции вот здесь:
BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN'))

Если вы хотите использовать другое имя аккаунта, то вам нужно поменять его и в коде функции. Например, если имя вашего аккаунта MYOWNBOT, то ваш код будет выглядеть так:
BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMMYOWNBOT_TOKEN'))

Как формируется имя переменной окружения ACC_TELEGRAMMYOWNBOT_TOKEN, через которую функция получает свойство аккаунта, ровно как и любого другого ресурса в Swifty? Здесь:
  • ACC — идентификатор, что вы хотите обратиться к ресурсу типа Account;
  • TELEGRAM — тип аккаунта;
  • MYOWNBOT — имя аккаунта;
  • TOKEN — свойство аккаунта;

Код получившейся функции:
import json import os import sys import requests BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN')) def Main(req): try: data = json.loads(req.body.encode()) message = str(data["message"]["text"]) chat_id = data["message"]["chat"]["id"] first_name = data["message"]["chat"]["first_name"] response = "Please /start, {}".format(first_name) if "start" in message: response = "Hello {}! Type /help to get list of actions.".format(first_name) if "help" in message: response = "/about - get information about Swifty" if "about" in message: response = ("Swifty is the serverless platform that allows startups, developers and enterprises to develop and run application backend with minimal time-to-market, costs and without infrastructure management.\n" "Start creating your backend at\n" "https://swifty.cloud") data = {"text": response.encode("utf8"), "chat_id": chat_id} url = BASE_URL + "/sendMessage" requests.post(url, data) except Exception as e: print(e) return {"statusCode": 200}, None

Это простейший бот, который умеет отвечать на команды /start, /help и /about. Можете также добавить любые свои команды и расширить его функционал по-желанию.

Подключаем функцию к боту


Теперь вам нужно сказать телеграму, по какой ссылке находится ваш бот. Вам нужно открыть командную строку и выполнить в ней следующую команду. При этом YOUR_API_URL нужно заменить на API ссылку, которую вы скопировали ранее, а YOUR_ACCESS_TOKEN на токен.
curl -XPOST https://api.telegram.org/botYOUR_ACCESS_TOKEN/setWebhook?url=YOUR_API_URL

Если все прошло хорошо, то вы увидите примерно следующее:

{ "ok": true, "result": true, "description": "Webhook was set" }

Если вы находитесь в России, то все пройдет хорошо только в том случае, если у вас включен VPN.

Можно проверять


Найдите в telegram бота с вашим именем и попробуйте выполнить пару команд, например, /start или /about. Если все работает — поздравляем. Если нет — пожалуйтесь здесь в комментарии или в нашем slack канале.

Как работает такой готовый бот можно посмотреть, если найти в телеграме нашего бота с именем swifty_test_bot. Спасибо.

Make your ideas come app, как говорят в swifty.cloud.


Смотрите также