This repository has been archived by the owner on Apr 12, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbot.py
64 lines (50 loc) · 2.37 KB
/
bot.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
from matrix_bot_api.matrix_bot_api import MatrixBotAPI
from matrix_bot_api.mregex_handler import MRegexHandler
from matrix_bot_api.mcommand_handler import MCommandHandler
class BottyMcBotface:
def __init__(self, server, username, password):
# This is a bit broken. We don't want to hardcode any room, so set this as soon as we get the first message.
# The bot is talking to that room then
self.primary_room = None
self.receive_handler = None
self.reset_handler = None
self.bot = MatrixBotAPI(username, password, server.rstrip("/"))
# Add a regex handler for every message
msg_handler = MRegexHandler("^(?!\\!).+", self.__msg_callback)
self.bot.add_handler(msg_handler)
reset_handler = MCommandHandler("reset", self.__reset_callback)
self.bot.add_handler(reset_handler)
preset_handler = MCommandHandler("preset", self.__preset_callback)
self.bot.add_handler(preset_handler)
self.bot.start_polling()
def __set_primary_room(self, room):
if self.primary_room is None:
print("Primary room set!")
print(room)
self.primary_room = room
def __msg_callback(self, room, event):
self.__set_primary_room(room)
if self.receive_handler is not None:
if event["type"] == "m.room.message" and event["content"]["msgtype"] == "m.text":
self.receive_handler(room, event["sender"], event["content"]["body"])
def __reset_callback(self, room, event):
self.__set_primary_room(room)
print("Reset!")
if self.reset_handler is not None:
self.reset_handler(event["sender"], False)
def __preset_callback(self, room, event):
self.__set_primary_room(room)
print("Preference reset!")
if self.reset_handler is not None:
self.reset_handler(event["sender"], True)
def set_reset_handler(self, handler):
self.reset_handler = handler
def set_receive_handler(self, handler):
self.receive_handler = handler
def send(self, message, handle = None):
if self.primary_room is None:
raise Exception("no room set, write a message to set the room")
if handle is None:
self.primary_room.send_text("{}".format(message))
else:
self.primary_room.send_text("{} {}".format(handle, message))