From fdc913a58050ff863b456b764c9f19f89f8b6af1 Mon Sep 17 00:00:00 2001 From: Leandro Toledo Date: Tue, 7 Jul 2015 16:50:36 -0300 Subject: [PATCH] Adding Travis CI --- .travis.yml | 4 + requirements.txt | 1 + telegram/__init__.py | 26 +++++ telegram/audio.py | 0 telegram/bot.py | 168 ++++++++++++++++++++++++++++++++ telegram/contact.py | 0 telegram/document.py | 0 telegram/forcereply.py | 0 telegram/groupchat.py | 17 ++++ telegram/inputfile.py | 0 telegram/location.py | 0 telegram/message.py | 100 +++++++++++++++++++ telegram/photosize.py | 0 telegram/replykeyboardhide.py | 0 telegram/replykeyboardmarkup.py | 0 telegram/sticker.py | 0 telegram/update.py | 23 +++++ telegram/user.py | 21 ++++ telegram/userprofilephotos.py | 0 telegram/video.py | 0 20 files changed, 360 insertions(+) create mode 100644 .travis.yml create mode 100644 requirements.txt create mode 100644 telegram/__init__.py create mode 100644 telegram/audio.py create mode 100644 telegram/bot.py create mode 100644 telegram/contact.py create mode 100644 telegram/document.py create mode 100644 telegram/forcereply.py create mode 100644 telegram/groupchat.py create mode 100644 telegram/inputfile.py create mode 100644 telegram/location.py create mode 100644 telegram/message.py create mode 100644 telegram/photosize.py create mode 100644 telegram/replykeyboardhide.py create mode 100644 telegram/replykeyboardmarkup.py create mode 100644 telegram/sticker.py create mode 100644 telegram/update.py create mode 100644 telegram/user.py create mode 100644 telegram/userprofilephotos.py create mode 100644 telegram/video.py diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..4aeefc15a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: python +python: +- 2.7 +install: "pip install -r requirements.txt" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..f2293605c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/telegram/__init__.py b/telegram/__init__.py new file mode 100644 index 000000000..f3af46202 --- /dev/null +++ b/telegram/__init__.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +"""A library that provides a Python interface to the Telegram Bots API""" + +__author__ = 'leandrotoledodesouza@gmail.com' +__version__ = '0.1' + +import json + +from user import User +from message import Message +from update import Update +from groupchat import GroupChat +# from photosize import PhotoSize +# from audio import Audio +# from document import Document +# from sticket import Sticker +# from video import Video +# from contact import Contact +# from location import Location +# from inputfile import InputFile +# from userprofilephotos import UserProfilePhotos +# from replykeyboardmarkup import ReplyKeyboardMarkup +# from replykeyboardhide import ReplyKeyboardHide +# from forcereply import ForceReply +from bot import Bot diff --git a/telegram/audio.py b/telegram/audio.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/bot.py b/telegram/bot.py new file mode 100644 index 000000000..bef883f95 --- /dev/null +++ b/telegram/bot.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +"""A library that provides a Python interface to the Telegram Bots API""" + +import json +import requests + +from telegram import (User, Message, Update) + + +class Bot(object): + def __init__(self, + token, + base_url=None): + + if base_url is None: + self.base_url = 'https://api.telegram.org/bot%s' % token + else: + self.base_url = base_url + token + + def getMe(self): + + url = '%s/getMe' % (self.base_url) + + json_data = self._requestUrl(url, 'GET') + data = self._parseAndCheckTelegram(json_data.content) + + return User.newFromJsonDict(data) + + def sendMessage(self, + chat_id, + text, + disable_web_page_preview=None, + reply_to_message_id=None, + reply_markup=None): + + url = '%s/sendMessage' % (self.base_url) + + data = {'chat_id': chat_id, + 'text': text} + if disable_web_page_preview: + data['disable_web_page_preview'] = disable_web_page_preview + if reply_to_message_id: + data['reply_to_message_id'] = reply_to_message_id + if reply_markup: + data['reply_markup'] = reply_markup + + json_data = self._requestUrl(url, 'POST', data=data) + data = self._parseAndCheckTelegram(json_data.content) + + return Message.newFromJsonDict(data) + + def forwardMessage(self, + chat_id, + from_chat_id, + message_id): + + url = '%s/forwardMessage' % (self.base_url) + + data = {} + if chat_id: + data['chat_id'] = chat_id + if from_chat_id: + data['from_chat_id'] = from_chat_id + if message_id: + data['message_id'] = message_id + + json_data = self._requestUrl(url, 'POST', data=data) + data = self._parseAndCheckTelegram(json_data.content) + + return Message.newFromJsonDict(data) + + def sendPhoto(self, + chat_id, + photo, + caption=None, + reply_to_message_id=None, + reply_markup=None): + + url = '%s/sendPhoto' % (self.base_url) + + data = {'chat_id': chat_id, + 'photo': photo} + if caption: + data['caption'] = caption + if reply_to_message_id: + data['reply_to_message_id'] = reply_to_message_id + if reply_markup: + data['reply_markup'] = reply_markup + + json_data = self._requestUrl(url, 'POST', data=data) + data = self._parseAndCheckTelegram(json_data.content) + + return Message.newFromJsonDict(data) + + def sendAudio(self): + url = '%s/sendAudio' % (self.base_url) + + def sendDocument(self): + url = '%s/sendDocument' % (self.base_url) + + def sendSticker(self): + url = '%s/sendSticker' % (self.base_url) + + def sendVideo(self): + url = '%s/sendVideo' % (self.base_url) + + def sendLocation(self): + url = '%s/sendLocation' % (self.base_url) + + def sendChatAction(self): + url = '%s/sendChatAction' % (self.base_url) + + def getUserProfilePhotos(self): + url = '%s/getUserProfilePhotos' % (self.base_url) + + def getUpdates(self, + offset=None, + limit=100, + timeout=0): + + url = '%s/getUpdates' % (self.base_url) + + data = {} + if offset: + data['offset'] = offset + if limit: + data['limit'] = limit + if timeout: + data['timeout'] = timeout + + json_data = self._requestUrl(url, 'POST', data=data) + data = self._parseAndCheckTelegram(json_data.content) + + return [Update.newFromJsonDict(x) for x in data] + + def setWebhook(self): + url = '%s/setWebhook' % (self.base_url) + + def _requestUrl(self, + url, + method, + data=None): + + if method == 'POST': + try: + return requests.post( + url, + data=data + ) + except requests.RequestException as e: + pass + if method == 'GET': + try: + return requests.get(url) + except requests.RequestException as e: + pass # raise TelegramError(str(e)) + return 0 + + def _parseAndCheckTelegram(self, + json_data): + + try: + data = json.loads(json_data) + except ValueError: + pass + + return data['result'] diff --git a/telegram/contact.py b/telegram/contact.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/document.py b/telegram/document.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/forcereply.py b/telegram/forcereply.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/groupchat.py b/telegram/groupchat.py new file mode 100644 index 000000000..d1a1a258a --- /dev/null +++ b/telegram/groupchat.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + + +class GroupChat(object): + def __init__(self, **kwargs): + param_defaults = { + 'id': None, + 'title': None + } + + for (param, default) in param_defaults.iteritems(): + setattr(self, param, kwargs.get(param, default)) + + @staticmethod + def newFromJsonDict(data): + return GroupChat(id=data.get('id', None), + title=data.get('title', None)) diff --git a/telegram/inputfile.py b/telegram/inputfile.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/location.py b/telegram/location.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/message.py b/telegram/message.py new file mode 100644 index 000000000..58dfae250 --- /dev/null +++ b/telegram/message.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python + + +class Message(object): + def __init__(self, **kwargs): + param_defaults = { + 'message_id': None, + 'user': None, + 'date': None, + 'chat': None, + 'forward_from': None, + 'forward_date': None, + 'reply_to_message': None, + 'text': None, + 'audio': None, + 'document': None, + 'photo': None, + 'sticker': None, + 'video': None, + 'contact': None, + 'location': None, + 'new_chat_participant': None, + 'left_chat_participant': None, + 'new_chat_title': None, + 'new_chat_photo': None, + 'delete_chat_photo': None, + 'group_chat_created': None + } + + for (param, default) in param_defaults.iteritems(): + setattr(self, param, kwargs.get(param, default)) + + @staticmethod + def newFromJsonDict(data): + if 'from' in data: # from on api + from telegram import User + user = User.newFromJsonDict(data['from']) + else: + user = None + + if 'chat' in data: + if 'username' in data['chat']: + from telegram import User + chat = User.newFromJsonDict(data['chat']) + if 'title' in data['chat']: + from telegram import GroupChat + chat = GroupChat.newFromJsonDict(data['chat']) + else: + chat = None + + if 'forward_from' in data: + from telegram import User + forward_from = User.newFromJsonDict(data['forward_from']) + else: + forward_from = None + + if 'reply_to_message' in data: + reply_to_message = Message.newFromJsonDict( + data['reply_to_message'] + ) + else: + reply_to_message = None + + if 'new_chat_participant' in data: + from telegram import User + new_chat_participant = User.newFromJsonDict( + data['new_chat_participant'] + ) + else: + new_chat_participant = None + + if 'left_chat_participant' in data: + from telegram import User + left_chat_participant = User.newFromJsonDict( + data['left_chat_participant'] + ) + else: + left_chat_participant = None + + return Message(message_id=data.get('message_id', None), + user=user, + date=data.get('date', None), + chat=chat, + forward_from=forward_from, + forward_date=data.get('forward_date', None), + reply_to_message=reply_to_message, + text=data.get('text', None), + audio=data.get('audio', None), + document=data.get('document', None), + photo=data.get('photo', None), + sticker=data.get('sticker', None), + video=data.get('video', None), + contact=data.get('contact', None), + location=data.get('location', None), + new_chat_participant=new_chat_participant, + left_chat_participant=left_chat_participant, + new_chat_title=data.get('new_chat_title', None), + new_chat_photo=data.get('new_chat_photo', None), + delete_chat_photo=data.get('delete_chat_photo', None), + group_chat_created=data.get('group_chat_created', None)) diff --git a/telegram/photosize.py b/telegram/photosize.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/replykeyboardhide.py b/telegram/replykeyboardhide.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/replykeyboardmarkup.py b/telegram/replykeyboardmarkup.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/sticker.py b/telegram/sticker.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/update.py b/telegram/update.py new file mode 100644 index 000000000..438a42c07 --- /dev/null +++ b/telegram/update.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + + +class Update(object): + def __init__(self, **kwargs): + param_defaults = { + 'update_id': None, + 'message': None + } + + for (param, default) in param_defaults.iteritems(): + setattr(self, param, kwargs.get(param, default)) + + @staticmethod + def newFromJsonDict(data): + if 'message' in data: + from telegram import Message + message = Message.newFromJsonDict(data['message']) + else: + message = None + + return Update(update_id=data.get('update_id', None), + message=message) diff --git a/telegram/user.py b/telegram/user.py new file mode 100644 index 000000000..e3e18f257 --- /dev/null +++ b/telegram/user.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + + +class User(object): + def __init__(self, **kwargs): + param_defaults = { + 'id': None, + 'first_name': None, + 'last_name': None, + 'username': None + } + + for (param, default) in param_defaults.iteritems(): + setattr(self, param, kwargs.get(param, default)) + + @staticmethod + def newFromJsonDict(data): + return User(id=data.get('id', None), + first_name=data.get('first_name', None), + last_name=data.get('last_name', None), + username=data.get('username', None)) diff --git a/telegram/userprofilephotos.py b/telegram/userprofilephotos.py new file mode 100644 index 000000000..e69de29bb diff --git a/telegram/video.py b/telegram/video.py new file mode 100644 index 000000000..e69de29bb