Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Боты в telegram. Зачем они нужны?

Боты в telegram. Зачем они нужны?

Я написал бота расписания для моего университета. У этого бота каждый может узнать свое личное расписание на сегодня и на завтра. Поэтому могу рассказать о нем: общие положения, как сделать бота (какие библиотеки, какое API предоставляет телеграм и т.д.), способы применения, личный опыт и выловленные подводные камни.

Avatar for Moscow Python Meetup

Moscow Python Meetup

December 22, 2015
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. ЧТО ТАКОЕ TELEGRAM УЛЬТРАБЫСТРЫЙ МЕССЕНДЖЕР. ПРАВДА ▸ Android, iOS, WP,

    Mac/Linux/PC и даже web-версия! ▸ Защищенный ▸ Каналы, групповые чаты ▸ Простой API ▸ Open-source ▸ Боты!!1!1!
  2. С ЧЕГО НАЧАТЬ? БОТЫ В TELEGRAM ▸ BOT API ▸

    Регистрируем бота у ——> ▸ Token ▸ 123456:ABC-DEF1234ghIkl- zyx57W2v1u123ew11 ▸ Поддержка POST и GET ▸ https://api.telegram.org/ bot<token>/METHOD_NAME
  3. БОТЫ VS ЮЗЕРЫ В ЧЕМ РАЗНИЦА МЕЖДУ ПОЛЬЗОВАТЕЛЕМ И БОТОМ

    ▸ Нет online статуса ▸ Сообщения, посланные боту, удаляются после обработки ▸ Боты не могут начать беседу ▸ Username заканчивается на bot ▸ По дефолту, в группе боты принимают не все сообщения ▸ Боты никогда не спят и кушать не просят :)
  4. ПОГОВОРИМ ПРО UPDATE ЧТО ТАКОЕ ЭТОТ UPDATE? {'message': {'chat': {'id':

    56631662, 'type': 'private', 'first_name': 'Bogdan', 'username': 'Evstrat', 'last_name': 'Evstratenko'}, 'date': 1450788558, 'text': 'Пары на завтра', 'from': {'id': 56631662, 'first_name': 'Bogdan', 'username': 'Evstrat', 'last_name': 'Evstratenko'}, 'message_id': 43790}, 'update_id': 241290488}
  5. def sendMessage(self, chat_id, text, parse_mode=None, disable_web_page_preview=None, reply_to_message_id=None, reply_markup=None): p =

    {'chat_id': chat_id, 'text': text, 'parse_mode': parse_mode, 'disable_web_page_preview': disable_web_page_preview, 'reply_to_message_id': reply_to_message_id, 'reply_markup': reply_markup} r = requests.post(self._methodurl('sendMessage'), params=self._rectify(p), timeout=self._http_timeout) return self._parse(r)
  6. WEBHOOK def setWebhook(self, url=None, certificate=None): p = {'url': url} if

    certificate: files = {'certificate': certificate} r = requests.post(self._methodurl('setWebhook'), params=self._rectify(p), files=files, timeout=self._http_timeout) else: r = requests.post(self._methodurl('setWebhook'), params=self._rectify(p), timeout=self._http_timeout) return self._parse(r)
  7. import json from flask import Flask, request TOKEN = ''

    app = Flask(__name__) bot = TelegramBot(TOKEN) @app.route('/telegram/', methods=['POST']) def hello(): message = json.loads(request.data) if message['message']['text'] == '/ping': bot.send_message(message['message']['chat']['id'], 'Pong!') return 'ok'
  8. import asyncio
 import telepot
 import telepot.async
 
 class YourBot(telepot.async.Bot):
 @asyncio.coroutine


    def handle(self, msg):
 pass
 # do whatever you want
 
 TOKEN = ''
 
 bot = YourBot(TOKEN)
 loop = asyncio.get_event_loop()
 
 loop.create_task(bot.messageLoop())
 print('Listening ...')
 
 loop.run_forever()
  9. ОГРАНИЧЕНИЯ КАКИЕ ОГРАНИЧЕНИЯ? ▸ Сообщения в группу - 20 сообщений

    в минуту ▸ 30 сообщений в секунду разным юзерам ▸ Файлы < 50 MB на upload ▸ 20 MB на download ▸ Чат бот-бот ▸ Команды от других ботов (/start@BotYourBot) ▸ Отвечать на сообщения других ботов, НО если бот не упомянут по @имени