From e9185b0a03e363a8c697108873403ba66bb7e7d2 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Mon, 16 Oct 2017 14:42:06 +0300 Subject: [PATCH] Fix tg posting problem --- webapp/admin.py | 3 +++ webapp/migrations/0030_telegrammessage.py | 24 +++++++++++++++++++++++ webapp/models.py | 8 ++++++++ webapp/telegram_bot.py | 22 ++++++++++++++++++--- webapp/templates/kaehmy.html | 9 +++++++++ 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 webapp/migrations/0030_telegrammessage.py diff --git a/webapp/admin.py b/webapp/admin.py index 59a0086..2d0d3ba 100644 --- a/webapp/admin.py +++ b/webapp/admin.py @@ -5,6 +5,7 @@ from webapp.models import Official, Role from webapp.models import Feed, Tag, BaseFeed, Event, Registration from webapp.models import KaehmyForm, KaehmyMessage from webapp.models import CustomKaehmyRole, PresetKaehmyRole +from webapp.models import TelegramChannel, TelegramMessage from modeltranslation.admin import TranslationAdmin from django.contrib.auth.models import Permission # this is needed so that the models get registered for translation @@ -22,3 +23,5 @@ admin.site.register(KaehmyForm) admin.site.register(KaehmyMessage) admin.site.register(CustomKaehmyRole) admin.site.register(PresetKaehmyRole) +admin.site.register(TelegramChannel) +admin.site.register(TelegramMessage) diff --git a/webapp/migrations/0030_telegrammessage.py b/webapp/migrations/0030_telegrammessage.py new file mode 100644 index 0000000..03615b0 --- /dev/null +++ b/webapp/migrations/0030_telegrammessage.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-10-16 11:32 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0029_baserole_category'), + ] + + operations = [ + migrations.CreateModel( + name='TelegramMessage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message_id', models.CharField(max_length=255, unique=True)), + ('channel_id', models.CharField(max_length=255)), + ('text', models.CharField(max_length=255)), + ], + ), + ] diff --git a/webapp/models.py b/webapp/models.py index af01aab..bac9733 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -267,6 +267,14 @@ class TelegramChannel(models.Model): channel_id = models.CharField(max_length=255) +class TelegramMessage(models.Model): + """Single Telegram message""" + + message_id = models.CharField(max_length=255, unique=True) + channel_id = models.CharField(max_length=255) + text = models.CharField(max_length=255) + + auditlog.register(Tag) auditlog.register(Feed) auditlog.register(Event) diff --git a/webapp/telegram_bot.py b/webapp/telegram_bot.py index f010c55..3da273d 100644 --- a/webapp/telegram_bot.py +++ b/webapp/telegram_bot.py @@ -5,7 +5,10 @@ import logging import telepot from django.conf import settings -from webapp.models import TelegramChannel +from django.dispatch import receiver +from django.db.models.signals import post_save, post_delete, pre_save + +from webapp.models import TelegramChannel, TelegramMessage TOKEN = settings.TELEGRAM_BOT_TOKEN bot = telepot.Bot(TOKEN) @@ -22,14 +25,21 @@ class KaehmyHandler: if flavor == 'chat': text = msg['text'] id = msg['chat']['id'] + msg_id = msg['message_id'] if text == '/start': TelegramChannel.objects.create(channel_id=id) - bot.sendMessage(id, 'Moro! Uudet kaehmyt postataan tälle kanavalle.') + try: + TelegramMessage.objects.create(message_id=msg_id, channel_id=id, text='Moro! Uudet kaehmyt postataan tälle kanavalle.') + except: + pass elif text == '/stop': channels_started = [int(channel.channel_id) for channel in TelegramChannel.objects.all()] if id in channels_started: TelegramChannel.objects.get(channel_id=id).delete() - bot.sendMessage(id, 'Lopetetaan kaehmyjen postailu.') + try: + TelegramMessage.objects.create(message_id=msg_id, channel_id=id, text='Lopetetaan kaehmyjen postailu.') + except: + pass def announce(self, url, name): channels_started = [channel.channel_id for channel in TelegramChannel.objects.all()] @@ -49,3 +59,9 @@ try: main() except Exception as ex: logging.exception('Failed to create Telegram bot with token "{}"'.format(TOKEN)) + + +@receiver(post_save, sender=TelegramMessage, dispatch_uid="save_tg_message") +def save_message(sender, instance, **kwargs): + bot.sendMessage(instance.channel_id, instance.text) + instance.save() \ No newline at end of file diff --git a/webapp/templates/kaehmy.html b/webapp/templates/kaehmy.html index 9800121..d827d89 100644 --- a/webapp/templates/kaehmy.html +++ b/webapp/templates/kaehmy.html @@ -12,6 +12,15 @@

{% trans "Kaehmy" %}

+

+ Kaehmykoneella voit ilmaista kiinnostuksesi toimia killassa ensi vuonna. + Listassa on vastuualueittain sekä hallitus- että toimihenkilövirkoja. + Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan uutta toimenkuvaa. + Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa konsultoida kaehmyopasta tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan henkilöön. +

+

+ Muista, että kaehmyn lähettäminen on kiinnostuksen ilmaus eikä siis missään nimessä sitova ilmoittautumien mihinkään tehtävään! +

{% csrf_token %} {% bootstrap_field form.name %} {% bootstrap_field form.email %}