From 1f968d1c7bad9d3d1cc61d074154afde7795bd33 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 10:36:23 -0400 Subject: [PATCH 1/6] formatting --- sopel_modules/SpiceBot_Core_Commands/RegNicks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Core_Commands/RegNicks.py b/sopel_modules/SpiceBot_Core_Commands/RegNicks.py index 8833b57..a761953 100644 --- a/sopel_modules/SpiceBot_Core_Commands/RegNicks.py +++ b/sopel_modules/SpiceBot_Core_Commands/RegNicks.py @@ -13,11 +13,11 @@ from sopel_modules.spicemanip import spicemanip @sopel.module.nickname_commands('regnicks', 'regnick') def nickname_comand_regnicks(bot, trigger, botcom): reggedusers = SpiceBot.users.dict["registered"] - bot.osd("These users are registered " + spicemanip(reggedusers, 'andlist') + ".", trigger.nick, 'notice') + bot.osd(["These users are registered:", spicemanip(reggedusers, 'andlist')], trigger.nick, 'notice') notregged = [] for user in SpiceBot.users.dict["online"]: usernick = SpiceBot.users.ID(user) if str(usernick).lower() not in [x.lower() for x in SpiceBot.users.dict["registered"]]: if usernick != bot.nick: notregged.append(usernick) - bot.osd("These online users are not registered " + spicemanip(notregged, 'andlist') + ".", trigger.nick, 'notice') + bot.osd(["These online users are not registered:", spicemanip(notregged, 'andlist')], trigger.nick, 'notice') From 5e53e650f3badf32515666f71f9c9375ace56df2 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 13:30:06 -0400 Subject: [PATCH 2/6] try it this way --- sopel_modules/SpiceBot/Prerun.py | 28 ++++++++++++++++++++++++---- sopel_modules/SpiceBot/Users.py | 9 +++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/sopel_modules/SpiceBot/Prerun.py b/sopel_modules/SpiceBot/Prerun.py index 5598c35..4ad62d8 100644 --- a/sopel_modules/SpiceBot/Prerun.py +++ b/sopel_modules/SpiceBot/Prerun.py @@ -285,12 +285,22 @@ def trigger_runstatus_query(bot, trigger, botcom): botmessagelog.messagelog_error(botcom.dict["log_id"], "The admin switch (-a) is for use by authorized nicks ONLY.") return False - # Stop here if not registered + # Stop here if not registered or not identified if bot.config.SpiceBot_regnick.regnick: + + # not registered if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["registered"]]: - message = "The query command requires you to be registerd with IRC services. Registering may take a few minutes to process with the bot." + message = "The " + str(botcom.dict["comtext"]) + " command requires you to be registered with IRC services. Registering may take a few minutes to process with the bot." return trigger_cant_run(bot, trigger, botcom, message) + # registered nick, but not identified + else: + message = "None" + # if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + # message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." + # return trigger_cant_run(bot, trigger, botcom, message) + # TODO + # don't run commands that are disabled in channels if not trigger.is_privmsg: channel_disabled_list = botcommands.get_commands_disabled(str(trigger.sender)) @@ -342,12 +352,22 @@ def trigger_runstatus(bot, trigger, botcom): botmessagelog.messagelog_error(botcom.dict["log_id"], "The admin switch (-a) is for use by authorized nicks ONLY.") return False - # Stop here if not registered + # Stop here if not registered or not identified if bot.config.SpiceBot_regnick.regnick: + + # not registered if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["registered"]]: - message = "The " + str(botcom.dict["comtext"]) + " command requires you to be registerd with IRC services. Registering may take a few minutes to process with the bot." + message = "The " + str(botcom.dict["comtext"]) + " command requires you to be registered with IRC services. Registering may take a few minutes to process with the bot." return trigger_cant_run(bot, trigger, botcom, message) + # registered nick, but not identified + else: + message = "None" + # if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + # message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." + # return trigger_cant_run(bot, trigger, botcom, message) + # TODO + # if botcom.dict["hyphen_arg"]: # return False diff --git a/sopel_modules/SpiceBot/Users.py b/sopel_modules/SpiceBot/Users.py index 634e47b..d76fcb8 100644 --- a/sopel_modules/SpiceBot/Users.py +++ b/sopel_modules/SpiceBot/Users.py @@ -30,7 +30,8 @@ class BotUsers(): "away": [], "current": {}, "registered": botdb.get_bot_value('regged_users') or [], - "notregistered": {}, + "register_check": {}, + "identified": [], } """during setup, all users from database are offline until marked online""" for user_id in list(self.dict["all"].keys()): @@ -357,14 +358,14 @@ class BotUsers(): if str(nick).lower() not in [x.lower() for x in self.dict["registered"]]: self.dict["registered"].append(str(nick)) else: - self.dict["notregistered"][str(nick).lower()] = time.time() + self.dict["register_check"][str(nick).lower()] = time.time() self.lock.release() def whois_send(self, bot, nick): if not bot.config.SpiceBot_regnick.regnick: return - if str(nick).lower() in [x.lower() for x in list(self.dict["notregistered"].keys())]: - timestamp = self.dict["notregistered"][str(nick).lower()] + if str(nick).lower() in [x.lower() for x in list(self.dict["register_check"].keys())]: + timestamp = self.dict["register_check"][str(nick).lower()] if time.time() - timestamp < 240: return if str(nick).lower() not in [x.lower() for x in self.dict["registered"]]: From 70fcf7d1f4769b4d2f9088e51765ed516a9cada8 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 13:41:42 -0400 Subject: [PATCH 3/6] users --- sopel_modules/SpiceBot/Users.py | 45 +++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/sopel_modules/SpiceBot/Users.py b/sopel_modules/SpiceBot/Users.py index d76fcb8..643292c 100644 --- a/sopel_modules/SpiceBot/Users.py +++ b/sopel_modules/SpiceBot/Users.py @@ -34,8 +34,11 @@ class BotUsers(): "identified": [], } """during setup, all users from database are offline until marked online""" - for user_id in list(self.dict["all"].keys()): - self.mark_user_offline(user_id) + # for user_id in list(self.dict["all"].keys()): + # self.mark_user_offline(user_id) + self.lock.acquire() + self.dict["offline"] = list(self.dict["all"].keys()) + self.lock.release() def __getattr__(self, name): ''' will only get called for undefined attributes ''' @@ -151,6 +154,7 @@ class BotUsers(): if int(nick_id) not in self.dict["offline"]: self.dict["offline"].append(int(nick_id)) self.lock.release() + self.whois_identify_forget(nick_id) def join(self, bot, trigger): if trigger.nick == bot.nick: @@ -349,27 +353,47 @@ class BotUsers(): if not bot.config.SpiceBot_regnick.regnick: return nick = trigger.args[1] - if str(nick).lower() in [x.lower() for x in self.dict["registered"]]: - return self.whois_handle(nick) def whois_handle(self, nick): + nick_id = self.whois_ident(nick) self.lock.acquire() + # identified + if int(nick_id) not in self.dict["identified"]: + self.dict["identified"].append(int(nick_id)) + # registered if str(nick).lower() not in [x.lower() for x in self.dict["registered"]]: self.dict["registered"].append(str(nick)) - else: - self.dict["register_check"][str(nick).lower()] = time.time() self.lock.release() def whois_send(self, bot, nick): if not bot.config.SpiceBot_regnick.regnick: return - if str(nick).lower() in [x.lower() for x in list(self.dict["register_check"].keys())]: + check_whois = False + nick_id = self.whois_ident(nick) + + # No registered check + if str(nick).lower() not in [x.lower() for x in list(self.dict["register_check"].keys())]: + check_whois = True + elif nick_id in self.dict["identified"]: timestamp = self.dict["register_check"][str(nick).lower()] - if time.time() - timestamp < 240: - return - if str(nick).lower() not in [x.lower() for x in self.dict["registered"]]: + if time.time() - timestamp >= 1800: + check_whois = True + else: + timestamp = self.dict["register_check"][str(nick).lower()] + if time.time() - timestamp >= 240: + check_whois = True + if check_whois: bot.write(['WHOIS', str(nick)]) + self.lock.acquire() + self.dict["register_check"][str(nick).lower()] = time.time() + self.lock.release() + + def whois_identify_forget(self, nick_id): + self.lock.acquire() + if int(nick_id) in self.dict["identified"]: + self.dict["identified"].remove(int(nick_id)) + self.lock.release() def account(self, bot, trigger): # Identify @@ -480,6 +504,7 @@ class BotUsers(): # if bot.config.SpiceBot_regnick.regnick: # if str(target).lower() not in [x.lower() for x in self.dict["registered"]]: # return {"targetgood": False, "error": "It looks like " + self.nick_actual(target) + " is not a registered nick.", "reason": "unregged"} + # TODO identified return targetgood From 977b9aa41f6b1a99e189ad0454fea428769760fa Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 14:16:12 -0400 Subject: [PATCH 4/6] identify check --- sopel_modules/SpiceBot/Prerun.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/sopel_modules/SpiceBot/Prerun.py b/sopel_modules/SpiceBot/Prerun.py index 4ad62d8..37ff224 100644 --- a/sopel_modules/SpiceBot/Prerun.py +++ b/sopel_modules/SpiceBot/Prerun.py @@ -295,11 +295,9 @@ def trigger_runstatus_query(bot, trigger, botcom): # registered nick, but not identified else: - message = "None" - # if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: - # message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." - # return trigger_cant_run(bot, trigger, botcom, message) - # TODO + if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." + return trigger_cant_run(bot, trigger, botcom, message) # don't run commands that are disabled in channels if not trigger.is_privmsg: @@ -362,11 +360,9 @@ def trigger_runstatus(bot, trigger, botcom): # registered nick, but not identified else: - message = "None" - # if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: - # message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." - # return trigger_cant_run(bot, trigger, botcom, message) - # TODO + if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." + return trigger_cant_run(bot, trigger, botcom, message) # if botcom.dict["hyphen_arg"]: # return False From 7201d04871a33310771424816e2498940590f46b Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 14:24:23 -0400 Subject: [PATCH 5/6] test --- sopel_modules/SpiceBot_Core_Commands/RegNicks.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sopel_modules/SpiceBot_Core_Commands/RegNicks.py b/sopel_modules/SpiceBot_Core_Commands/RegNicks.py index a761953..5ed340b 100644 --- a/sopel_modules/SpiceBot_Core_Commands/RegNicks.py +++ b/sopel_modules/SpiceBot_Core_Commands/RegNicks.py @@ -21,3 +21,9 @@ def nickname_comand_regnicks(bot, trigger, botcom): if usernick != bot.nick: notregged.append(usernick) bot.osd(["These online users are not registered:", spicemanip(notregged, 'andlist')], trigger.nick, 'notice') + + identusers = [] + for user in SpiceBot.users.identified: + usernick = SpiceBot.users.ID(user) + identusers.append(str(usernick)) + bot.osd(["These online users are identified:", spicemanip(identusers, 'andlist')], trigger.nick, 'notice') From 7324c63c60fcb6315d5236fe7f43a4be1d0eec17 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 18 Sep 2019 14:26:47 -0400 Subject: [PATCH 6/6] nick_id --- sopel_modules/SpiceBot/Prerun.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot/Prerun.py b/sopel_modules/SpiceBot/Prerun.py index 37ff224..4ea70f5 100644 --- a/sopel_modules/SpiceBot/Prerun.py +++ b/sopel_modules/SpiceBot/Prerun.py @@ -295,7 +295,8 @@ def trigger_runstatus_query(bot, trigger, botcom): # registered nick, but not identified else: - if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + nick_id = botusers.whois_ident(trigger.nick) + if nick_id not in botusers.dict["identified"]: message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." return trigger_cant_run(bot, trigger, botcom, message) @@ -360,7 +361,8 @@ def trigger_runstatus(bot, trigger, botcom): # registered nick, but not identified else: - if str(trigger.nick).lower() not in [x.lower() for x in botusers.dict["identified"]]: + nick_id = botusers.whois_ident(trigger.nick) + if nick_id not in botusers.dict["identified"]: message = "Your nickname appears to be registered with IRC services. However, you have not identified. Identifying may take a few minutes to process with the bot." return trigger_cant_run(bot, trigger, botcom, message)