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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
import uuid
import IRCBuffer, Utils
class Channel(object):
def __init__(self, name, id, server, bot):
self.name = Utils.irc_lower(server, name)
self.id = id
self.server = server
self.bot = bot
self.topic = ""
self.topic_setter_nickname = None
self.topic_setter_username = None
self.topic_setter_hostname = None
self.topic_time = 0
self.users = set([])
self.modes = {}
self.created_timestamp = None
self.buffer = IRCBuffer.Buffer(bot, server)
def __repr__(self):
return "IRCChannel.Channel(%s|%s)" % (self.server.name, self.name)
def set_topic(self, topic):
self.topic = topic
def set_topic_setter(self, nickname, username=None, hostname=None):
self.topic_setter_nickname = nickname
self.topic_setter_username = username
self.topic_setter_hostname = hostname
def set_topic_time(self, unix_timestamp):
self.topic_time = unix_timestamp
def add_user(self, user):
self.users.add(user)
def remove_user(self, user):
self.users.remove(user)
for mode in list(self.modes.keys()):
if mode in self.server.mode_prefixes.values(
) and user in self.modes[mode]:
self.modes[mode].discard(user)
if not len(self.modes[mode]):
del self.modes[mode]
def has_user(self, user):
return user in self.users
def add_mode(self, mode, arg=None):
if not mode in self.modes:
self.modes[mode] = set([])
if arg:
if mode in self.server.mode_prefixes.values():
user = self.server.get_user(arg)
if user:
self.modes[mode].add(user)
else:
self.modes[mode].add(arg.lower())
def remove_mode(self, mode, arg=None):
if not arg:
del self.modes[mode]
else:
if mode in self.server.mode_prefixes.values():
user = self.server.get_user(arg)
if user:
self.modes[mode].discard(user)
else:
self.modes[mode].discard(arg.lower())
if not len(self.modes[mode]):
del self.modes[mode]
def change_mode(self, remove, mode, arg=None):
if remove:
self.remove_mode(mode, arg)
else:
self.add_mode(mode, arg)
def set_setting(self, setting, value):
self.bot.database.channel_settings.set(self.id, setting, value)
def get_setting(self, setting, default=None):
return self.bot.database.channel_settings.get(self.id, setting,
default)
def find_settings(self, pattern, default=[]):
return self.bot.database.channel_settings.find(self.id, pattern,
default)
def find_settings_prefix(self, prefix, default=[]):
return self.bot.database.channel_settings.find_prefix(self.id,
prefix, default)
def del_setting(self, setting):
self.bot.database.channel_settings.delete(self.id, setting)
def set_user_setting(self, user_id, setting, value):
self.bot.database.user_channel_settings.set(user_id, self.id,
setting, value)
def get_user_setting(self, user_id, setting, default=None):
return self.bot.database.user_channel_settings.get(user_id,
self.id, setting, default)
def find_user_settings(self, user_i, pattern, default=[]):
return self.bot.database.user_channel_settings.find(user_id,
self.id, pattern, default)
def find_user_settings_prefix(self, user_id, prefix, default=[]):
return self.bot.database.user_channel_settings.find_prefix(
user_id, self.id, prefix, default)
def del_user_setting(self, user_id, setting):
self.bot.database.user_channel_settings.delete(user_id, self.id,
setting)
def find_all_by_setting(self, setting, default=[]):
return self.bot.database.user_channel_settings.find_all_by_setting(
self.id, setting, default)
def send_message(self, text, prefix=None):
self.server.send_message(self.name, text, prefix=prefix)
def send_mode(self, mode=None, target=None):
self.server.send_mode(self.name, mode, target)
def send_kick(self, target, reason=None):
self.server.send_kick(self.name, target, reason)
def send_ban(self, hostmask):
self.server.send_mode(self.name, "+b", hostmask)
def send_unban(self, hostmask):
self.server.send_mode(self.name, "-b", hostmask)
def send_topic(self, topic):
self.server.send_topic(self.name, topic)
def mode_or_above(self, user, mode):
mode_orders = list(self.server.mode_prefixes.values())
mode_index = mode_orders.index(mode)
for mode in mode_orders[:mode_index+1]:
if user in self.modes.get(mode, []):
return True
return False
def get_user_status(self, user):
modes = ""
for mode in self.server.mode_prefixes.values():
if user in self.modes.get(mode, []):
modes += mode
return modes
|