modeChanged() works properly, small changes to module loading

This commit is contained in:
iou1name 2018-05-27 14:16:50 -04:00
parent 4a7e76a897
commit b8bbcd4971
4 changed files with 52 additions and 51 deletions

53
bot.py
View File

@ -120,12 +120,11 @@ class Fulvia(irc.IRCClient):
print(f"{failed} modules failed to load")
def register_callable(self, callables):
def register_callable(self, func):
"""
Registers all callable functions loaded from modules into one
convenient table.
"""
for func in callables:
if hasattr(func, 'commands'):
self._callables[func.__name__] = func
for cmd in func.commands:
@ -239,7 +238,7 @@ class Fulvia(irc.IRCClient):
self._times[func_name]["global"] = time.time()
if func.thread == True:
t = threading.Thread(target=self.call, args=(func, bot, trigger))
t = threading.Thread(target=self.call,args=(func, bot, trigger))
t.start()
else:
self.call(func, bot, trigger)
@ -260,17 +259,26 @@ class Fulvia(irc.IRCClient):
def modeChanged(self, user, channel, add_mode, modes, args):
"""Called when users or channel's modes are changed."""
# TODO: do this function the right way
# TODO: channel modes
# modes[0] is lazy, but ought to work in most cases
if modes[0] in tools.op_level.keys():
for n, name in enumerate(args):
if not channel.startswith("#"): # server level
return
for n, mode in enumerate(modes):
if args[n] == None: # channel mode
if add_mode:
mode = tools.op_level[modes[n]]
self.channels[channel].privileges[name] = mode
self.channels[channel].modes.add(mode)
else:
# this is extremely lazy and won't work in a lot of cases
self.channels[channel].privileges[name] = 0
self.channels[channel].modes.remove(mode)
elif mode in tools.op_level.keys(): # user mode, op_level mode
nick = args[n]
op_level = tools.op_level[mode]
if add_mode:
self.channels[channel].privileges[nick] += op_level
else:
self.channels[channel].privileges[nick] -= op_level
else: # user mode, non-op_level mode
continue
def signedOn(self):
@ -348,19 +356,10 @@ class Fulvia(irc.IRCClient):
## User commands, from client->server
def msg(self, user, message, length=None):
"""
Send a message to a user or channel. See irc.IRCClient.msg for more
information.
Provided solely for documentation and clarity's sake.
"""
irc.IRCClient.msg(self, user, message, length=None)
def reply(self, text, dest, reply_to, notice=False):
"""
For compatibility with most of the sopel modules. Will phase it out
in favor of self.msg eventually.
Sends a message to 'dest' prefixed with 'reply_to' and a colon,
ala "reply_to: text". More useful with the wrapper class.
"""
text = reply_to + ": " + text
self.msg(dest, text)
@ -392,11 +391,11 @@ class Fulvia(irc.IRCClient):
class FulviaWrapper():
"""
A wrapper class for Fulvia to provide default destinations for msg
methods and so forth.
"""
def __init__(self, fulvia, trigger):
"""
A wrapper class for Fulvia to provide default destinations for
msg methods and so forth.
"""
object.__setattr__(self, '_bot', fulvia)
object.__setattr__(self, '_trigger', trigger)
# directly setting these values would cause a recursion loop

View File

@ -15,7 +15,8 @@ def load_module(bot, path):
if hasattr(module, 'setup'):
module.setup(bot)
relevant_parts = process_module(module, bot.config)
bot.register_callable(relevant_parts)
for part in relevant_parts:
bot.register_callable(part)
def unload_module(bot, name):

View File

@ -42,7 +42,9 @@ def title_auto(bot, trigger):
res.raise_for_status()
except:
continue
if not res.headers["Content-Type"].startswith("text/html"):
if not res.headers.get("Content-Type"):
continue
if not res.headers.get("Content-Type").startswith("text/html"):
continue
if res.text.find("<title>") == -1:
continue

View File

@ -100,9 +100,8 @@ class Channel(object):
self.privileges = {}
"""The op levels of the users in the channel."""
self.modes = ""
"""The mode of the channel."""
# NOTE: this doesn't work yet
self.modes = set()
"""The current modes on the channel."""
def remove_user(self, nick):
"""