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
133
134
135
136
137
138
139
140
141
142
143
144
145
|
import uuid
from src import IRCBuffer, IRCObject, utils
class Channel(IRCObject.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.user_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 __str__(self):
return 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.prefix_modes and user in self.modes[mode]:
self.modes[mode].discard(user)
if not len(self.modes[mode]):
del self.modes[mode]
if user in self.user_modes:
del self.user_modes[user]
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.prefix_modes:
user = self.server.get_user(arg)
if user:
self.modes[mode].add(user)
if not user in self.user_modes:
self.user_modes[user] = set([])
self.user_modes[user].add(mode)
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.prefix_modes:
user = self.server.get_user(arg)
if user:
self.modes[mode].discard(user)
self.user_modes[user].discard(mode)
if not self.user_modes[user]:
del self.user_modes[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, tags={}):
self.server.send_message(self.name, text, prefix=prefix, tags=tags)
def send_notice(self, text, prefix=None, tags={}):
self.server.send_notice(self.name, text, prefix=prefix, tags=tags)
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 send_part(self, reason=None):
self.server.send_part(self.name, reason)
def mode_or_above(self, user, mode):
mode_orders = list(self.server.prefix_modes)
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 has_mode(self, user, mode):
return user in self.modes.get(mode, [])
def get_user_status(self, user):
return self.user_modes.get(user, [])
|