From b963beeded77c9af68b79a2a34092e60a21888eb Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 17 Aug 2015 23:21:45 +0100 Subject: [PATCH] Initial attempt at telegram notifications --- PyRIGS/settings.py | 1 + telegram_interface/__init__.py | 0 telegram_interface/admin.py | 3 ++ telegram_interface/models.py | 82 ++++++++++++++++++++++++++++++++++ telegram_interface/tests.py | 3 ++ telegram_interface/views.py | 3 ++ temp.py | 13 ++++++ 7 files changed, 105 insertions(+) create mode 100644 telegram_interface/__init__.py create mode 100644 telegram_interface/admin.py create mode 100644 telegram_interface/models.py create mode 100644 telegram_interface/tests.py create mode 100644 telegram_interface/views.py create mode 100644 temp.py diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index d85ff887..bdfb6c85 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', 'RIGS', + 'telegram_interface', 'debug_toolbar', 'registration', diff --git a/telegram_interface/__init__.py b/telegram_interface/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/telegram_interface/admin.py b/telegram_interface/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/telegram_interface/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/telegram_interface/models.py b/telegram_interface/models.py new file mode 100644 index 00000000..db90e762 --- /dev/null +++ b/telegram_interface/models.py @@ -0,0 +1,82 @@ +from django.db import models + +import telegram +import time + +from django.conf import settings + +class TelegramManager(models.Model): + offset = models.CharField(max_length=255, null=False, blank=True, default="") + token = models.CharField(max_length=255, null=False, blank=False) + + @property + def bot(self): + return telegram.Bot(token=self.token) + + def lookupUpdates(self): + updates = self.bot.getUpdates(offset=self.offset) + if len(updates) > 0: + self.parseUpdates(updates) + self.offset = updates[-1].to_dict()["update_id"]+1 + self.save() + + def parseUpdates(self,updates): + for update in updates: + chat_id = update.message.chat_id + + try: + chat_object = Chat.objects.get(chat_id=chat_id,manager=self) + self.knownChat(update,chat_object) + + except Chat.DoesNotExist: + self.unknownChat(update) + + def unknownChat(self,update): + text = update.message.text + + if text.startswith("/start"): + chat = Chat(chat_id=update.message.chat.id,manager=self) + chat.save() + + chat.sendMessage( "Hi, I'll send you updates on any rigs.") + else: + self.bot.sendMessage(chat_id=update.message.chat.id, text="I don't know you, and won't talk to you until you /start me.") + + def knownChat(self, update, chat): + text = update.message.text + + if text.startswith("/stop"): + chat.sendMessage( "Ok, I'll stop sending you messages. If you want to restart just type /start") + chat.delete() + elif text.startswith("/start"): + chat.sendMessage("I already know you, no need to /start me again!") + elif text.startswith("/"): + chat.sendMessage("Sorry, I don't know that command") + + def sendMessage(self, chat, message): + self.bot.sendMessage(chat_id=chat.chat_id, text=message) + + def broadcastMessage(self,message): + chats = Chat.objects.all() + + for chat in chats: + chat.sendMessage(message) + + +class Chat(models.Model): + chat_id = models.CharField(max_length=255, null=False, blank=False) + manager = models.ForeignKey('TelegramManager', related_name='chats', blank=False, null=False) + user = models.ForeignKey(settings.AUTH_USER_MODEL, null=False) #Model must have + + api_key = models.CharField(max_length=255, null=False, blank=False) + + def sendMessage(self,message): + self.manager.sendMessage(self,message) + +from django.db.models.signals import pre_save +from django.dispatch import receiver +from reversion.models import Revision + +@receiver(pre_save, sender=Revision) +def my_handler(sender, **kwargs): + print "I just got triggered" diff --git a/telegram_interface/tests.py b/telegram_interface/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/telegram_interface/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/telegram_interface/views.py b/telegram_interface/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/telegram_interface/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/temp.py b/temp.py new file mode 100644 index 00000000..ffa7030d --- /dev/null +++ b/temp.py @@ -0,0 +1,13 @@ +from telegram_interface import models + +# man = models.TelegramManager(token="135462350:AAEhnE-Nd90fQIYM988H3rfUKVsT2MI24_A") +# man.save() + +man = models.TelegramManager.objects.all()[0] + + +man.lookupUpdates() + +man.broadcastMessage("THIS IS A BROADCAST, CAN YOU HEAR ME?") + +exit() \ No newline at end of file