aboutsummaryrefslogtreecommitdiffstats
path: root/botmanager.py
blob: eeab4eac874676f7cc2c64304e7ea4f0510e20ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import random
import sys
import requests
import telepot
import traceback
import time
import logging


class BotManager(object):
    active_chat_ids = []
    shoutbox_api_url = "http://localhost:8080"

    def __init__(self, token):
        self.token = token

        # Attempt to create a bot with telepot
        try:
            logging.info("Creating bot listener with token {}...".format(token))
            self.bot = telepot.Bot(token)
            logging.info("Bot succesfully created.")
        except:
            traceback.print_exc()
            logging.error("Error creating bot listener. radiodiodibot will now exit...")
            sys.exit(1)

    def start(self):
        self.started = True

        # Try fetching bot information from Telegram to check connection
        try:
            logging.info("Bot info: {}".format(self.bot.getMe()))
        except:
            logging.error("Could not fetch bot info. Check your token and connectivity to Telegram!")
            sys.exit(1)

        self.bot.message_loop(self.handle)
        logging.info("Listening for messages...")
        while True:
            self.get_messages_from_shoutbox()
            time.sleep(10)

    def get_messages_from_shoutbox(self):
        try:
            r = requests.get(self.shoutbox_api_url)
            logging.info("Response from API OK.")
        except:
            logging.warning("Failed to get response from API!")
            return

    def default_action(self, chat_id):
        self.bot.sendMessage(chat_id, "Radio palaa keväällä 2017!")

    # Placeholder action for testing commands
    def now_playing(self, chat_id):

        songs = ["Ace of Spades", "Mökkitie", "Alpha Russian XXL Night Mixtape", "teekkarihymni"]
        self.bot.sendMessage(chat_id, "Radiossa soi {}!".format(random.choice(songs)))

    def start_transmission(self, chat_id):
        self.active_chat_ids.append(chat_id)

        self.bot.sendMessage(chat_id, "OK! Radiodiodibot välittää nyt viestejä huutelulaatikon ja tämän keskustelun välillä.")

    def stop_transmission(self, chat_id):
        if chat_id in self.active_chat_ids:
            self.active_chat_ids.remove(chat_id)
            self.bot.sendMessage(chat_id, "OK! Radiodiodibot lopettaa nyt viestien välittämisen.")
        else:
            self.bot.sendMessage(chat_id, "Radiodiodibot ei ole aktiivinen tässä keskustelussa.")

    # Determine which action to take
    def parse_message(self, msg):
        t = msg["text"]
        content_type, chat_type, chat_id = telepot.glance(msg)
        if "/nowplaying" in t:
            self.now_playing(chat_id)
        elif "/start" in t:
            self.start_transmission(chat_id)
        elif "/stop" in t:
            self.stop_transmission(chat_id)
        else:
            self.default_action(chat_id)

    # Start parsing the incoming message if it is a text message
    def handle(self, msg):
        content_type, chat_type, chat_id = telepot.glance(msg)
        logging.info(content_type, chat_type, chat_id)

        if content_type == 'text':
            self.parse_message(msg)