-
Notifications
You must be signed in to change notification settings - Fork 0
/
RadioBot.py
67 lines (55 loc) · 2.28 KB
/
RadioBot.py
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
import logging
from sleekxmpp import ClientXMPP
import subprocess
class RadioBot(ClientXMPP):
def __init__(self, jid, password, channel, nick, whitelist):
self.whitelist = whitelist
self.channel = channel
self.nick = nick
ClientXMPP.__init__(self, jid, password)
self.add_event_handler("session_start", self.session_start)
self.add_event_handler("groupchat_message", self.handle_group_message)
def session_start(self, event):
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)-8s %(message)s')
self.send_presence()
self.register_plugin('xep_0045')
self.get_roster()
self.plugin['xep_0045'].joinMUC(self.channel,
self.nick,
wait=True)
def handle_group_message(self, msg):
if msg['type'] in ('groupchat', 'normal'):
send_from = msg['from']
send_name = send_from.resource.lower()
if not self.whitelist or send_name in self.whitelist:
body = msg['body']
if self.nick in body:
if "play radio" in body:
self.handle_play_radio(body)
if "stop" in body:
self.handle_stop(body)
if "play file" in body:
self.handle_play_file(body)
if "set volume" in body:
self.handle_set_volume(body)
if "mute" in body:
self.handle_set_volume("set volume 0%")
def handle_play_radio(self, command):
station = command.split()[-1]
cmd = "mplayer -playlist " + station +" &"
self.run_command(cmd)
def handle_stop(self, command):
cmd = "pkill -f mplayer"
self.run_command(cmd)
def handle_play_file(self, command):
file = command.split()[-1]
cmd = "mplayer " + file + " &"
self.run_command(cmd)
def handle_set_volume(self, command):
volume = command.split()[-1]
cmd = "amixer sset 'Master' " + volume
self.run_command(cmd)
def run_command(self, command):
print("execute: " + command)
subprocess.Popen(command, shell=True)