def _caller(self, var, wrapper: MessageDispatcher, message: str): _ignore_locals_ = True if self.playing and (wrapper.source not in get_players() or wrapper.source in var.DISCONNECTED): return for role in self.roles: if wrapper.source in var.ROLES[role]: break else: if (self.users is not None and wrapper.source not in self.users) or self.roles: return if self.silenced and src.status.is_silent(var, wrapper.source): wrapper.pm(messages["silenced"]) return if self.playing or self.roles or self.users: self.func(var, wrapper, message) # don't check restrictions for game commands # Role commands might end the night if it's nighttime if var.PHASE == "night": from src.wolfgame import chk_nightdone chk_nightdone() return if self.owner_only: if wrapper.source.is_owner(): adminlog(wrapper.target.name, wrapper.source.rawnick, self.name, message) self.func(var, wrapper, message) return wrapper.pm(messages["not_owner"]) return temp = wrapper.source.lower() flags = var.FLAGS_ACCS[temp.account] # TODO: add flags handling to User if self.flag and (wrapper.source.is_admin() or wrapper.source.is_owner()): adminlog(wrapper.target.name, wrapper.source.rawnick, self.name, message) return self.func(var, wrapper, message) denied_commands = var.DENY_ACCS[temp.account] # TODO: add denied commands handling to User if self.commands & denied_commands: wrapper.pm(messages["invalid_permissions"]) return if self.flag: if self.flag in flags: adminlog(wrapper.target.name, wrapper.source.rawnick, self.name, message) self.func(var, wrapper, message) return wrapper.pm(messages["not_an_admin"]) return self.func(var, wrapper, message)
def caller(self, cli, rawnick, chan, rest): _ignore_locals_ = True if users.equals(chan, users.Bot.nick): chan = users.parse_rawnick_as_dict(rawnick)["nick"] largs = [cli, rawnick, chan, rest] cli, rawnick, chan, rest = largs nick, mode, ident, host = parse_nick(rawnick) if ident is None: ident = "" if host is None: host = "" if not self.raw_nick: largs[1] = nick if not self.pm and chan == nick: return # PM command, not allowed if not self.chan and chan != nick: return # channel command, not allowed if chan.startswith("#") and chan != botconfig.CHANNEL and not (self.flag or self.owner_only): if "" in self.cmds: return # don't have empty commands triggering in other channels for command in self.cmds: if command in botconfig.ALLOWED_ALT_CHANNELS_COMMANDS: break else: return if nick not in var.USERS and not is_fake_nick(nick): return if nick in var.USERS and var.USERS[nick]["account"] != "*": acc = irc_lower(var.USERS[nick]["account"]) else: acc = None ident = irc_lower(ident) host = host.lower() hostmask = nick + "!" + ident + "@" + host if "" in self.cmds: self.func(*largs) return if self.phases and var.PHASE not in self.phases: return if self.playing and (nick not in list_players() or users._get(nick) in var.DISCONNECTED): return for role in self.roles: if users._get(nick) in var.ROLES[role]: break else: if (self.nicks is not None and nick not in self.nicks) or self.roles: return if self.silenced and nick in var.SILENCED: if chan == nick: pm(cli, nick, messages["silenced"]) else: cli.notice(nick, messages["silenced"]) return if self.roles or (self.nicks is not None and nick in self.nicks): self.func(*largs) # don't check restrictions for role commands # Role commands might end the night if it's nighttime if var.PHASE == "night": from src.wolfgame import chk_nightdone chk_nightdone() return forced_owner_only = False if hasattr(botconfig, "OWNERS_ONLY_COMMANDS"): for command in self.cmds: if command in botconfig.OWNERS_ONLY_COMMANDS: forced_owner_only = True break owner = is_owner(nick, ident, host) if self.owner_only or forced_owner_only: if owner: adminlog(chan, rawnick, self.name, rest) self.func(*largs) return if chan == nick: pm(cli, nick, messages["not_owner"]) else: cli.notice(nick, messages["not_owner"]) return flags = var.FLAGS[hostmask] + var.FLAGS_ACCS[acc] admin = is_admin(nick, ident, host) if self.flag and (admin or owner): adminlog(chan, rawnick, self.name, rest) self.func(*largs) return denied_cmds = var.DENY[hostmask] | var.DENY_ACCS[acc] for command in self.cmds: if command in denied_cmds: if chan == nick: pm(cli, nick, messages["invalid_permissions"]) else: cli.notice(nick, messages["invalid_permissions"]) return if self.flag: if self.flag in flags: adminlog(chan, rawnick, self.name, rest) self.func(*largs) return elif chan == nick: pm(cli, nick, messages["not_an_admin"]) else: cli.notice(nick, messages["not_an_admin"]) return self.func(*largs)
def caller(self, cli, rawnick, chan, rest): _ignore_locals_ = True user = users._get(rawnick, allow_none=True) # FIXME if users.equals(chan, users.Bot.nick): # PM target = users.Bot else: target = channels.get(chan, allow_none=True) if user is None or target is None: return dispatcher = MessageDispatcher(user, target) if (not self.pm and dispatcher.private) or (not self.chan and dispatcher.public): return # channel or PM command that we don't allow if dispatcher.public and target is not channels.Main and not (self.flag or self.owner_only): if "" in self.commands or not self.alt_allowed: return # commands not allowed in alt channels if "" in self.commands: self.func(var, dispatcher, rest) return if self.phases and var.PHASE not in self.phases: return if self.playing and (user not in get_players() or user in var.DISCONNECTED): return for role in self.roles: if user in var.ROLES[role]: break else: if (self.users is not None and user not in self.users) or self.roles: return if self.silenced and user.nick in var.SILENCED: # FIXME: Need to change this once var.SILENCED holds User instances dispatcher.pm(messages["silenced"]) return if self.roles or (self.users is not None and user in self.users): self.func(var, dispatcher, rest) # don't check restrictions for role commands # Role commands might end the night if it's nighttime if var.PHASE == "night": from src.wolfgame import chk_nightdone chk_nightdone() return if self.owner_only: if user.is_owner(): adminlog(chan, rawnick, self.name, rest) self.func(var, dispatcher, rest) return dispatcher.pm(messages["not_owner"]) return temp = user.lower() flags = var.FLAGS[temp.rawnick] + var.FLAGS_ACCS[temp.account] # TODO: add flags handling to User if self.flag and (user.is_admin() or user.is_owner()): adminlog(chan, rawnick, self.name, rest) return self.func(var, dispatcher, rest) denied_commands = var.DENY[temp.rawnick] | var.DENY_ACCS[temp.account] # TODO: add denied commands handling to User if self.commands & denied_commands: dispatcher.pm(messages["invalid_permissions"]) return if self.flag: if self.flag in flags: adminlog(chan, rawnick, self.name, rest) self.func(var, dispatcher, rest) return dispatcher.pm(messages["not_an_admin"]) return self.func(var, dispatcher, rest)