From 3311735ae3e96d7a920c46cd4648316efdc2290b Mon Sep 17 00:00:00 2001 From: Jimmy Cao Date: Fri, 24 Aug 2012 00:34:41 -0500 Subject: [PATCH] Add option for Vgr's reverse (opt-in) ping mode --- modules/wolfgame.py | 105 +++++++++++++++++++++++++++++-------------- settings/wolfgame.py | 27 ++++++++--- 2 files changed, 91 insertions(+), 41 deletions(-) diff --git a/modules/wolfgame.py b/modules/wolfgame.py index de5aea4..26021de 100644 --- a/modules/wolfgame.py +++ b/modules/wolfgame.py @@ -247,9 +247,16 @@ def pinger(cli, nick, chan, rest): if not var.PINGING: return if user in (botconfig.NICK, nick): return # Don't ping self. - if (var.PINGING and 'G' not in status and - '+' not in status and cloak not in var.AWAY): + if (all((not var.OPT_IN_PING, + 'G' not in status, # not /away + '+' not in status, # not already joined (voiced) + cloak not in var.AWAY)) or + all((var.OPT_IN_PING, '+' not in status, + cloak in var.PING_IN))): + TO_PING.append(user) + else: + print(var.OPT_IN_PING, var.PINGING, status, cloak) @@ -271,37 +278,6 @@ def pinger(cli, nick, chan, rest): cli.who(botconfig.CHANNEL) -@cmd("away", raw_nick=True) -@pmcmd("away", raw_nick=True) -def away(cli, nick, *rest): - """Use this to activate your away status (so you aren't pinged).""" - cloak = parse_nick(nick)[3] - nick = parse_nick(nick)[0] - if cloak in var.AWAY: - var.AWAY.remove(cloak) - var.remove_away(cloak) - - cli.notice(nick, "You are no longer marked as away.") - return - var.AWAY.append(cloak) - var.add_away(cloak) - - cli.notice(nick, "You are now marked as away.") - -@cmd("back", raw_nick=True) -@pmcmd("back", raw_nick=True) -def back_from_away(cli, nick, *rest): - """Unmarks away status""" - cloak = parse_nick(nick)[3] - nick = parse_nick(nick)[0] - if cloak not in var.AWAY: - cli.notice(nick, "You are not marked as away.") - return - var.AWAY.remove(cloak) - var.remove_away(cloak) - - cli.notice(nick, "You are no longer marked as away.") - @cmd("simple", raw_nick = True) @pmcmd("simple", raw_nick = True) def mark_simple_notify(cli, nick, *rest): @@ -321,6 +297,67 @@ def mark_simple_notify(cli, nick, *rest): cli.notice(nick, "You now receive simple role instructions.") +if not var.OPT_IN_PING: + @cmd("away", raw_nick=True) + @pmcmd("away", raw_nick=True) + def away(cli, nick, *rest): + """Use this to activate your away status (so you aren't pinged).""" + cloak = parse_nick(nick)[3] + nick = parse_nick(nick)[0] + if cloak in var.AWAY: + var.AWAY.remove(cloak) + var.remove_away(cloak) + + cli.notice(nick, "You are no longer marked as away.") + return + var.AWAY.append(cloak) + var.add_away(cloak) + + cli.notice(nick, "You are now marked as away.") + + @cmd("back", raw_nick=True) + @pmcmd("back", raw_nick=True) + def back_from_away(cli, nick, *rest): + """Unmarks away status""" + cloak = parse_nick(nick)[3] + nick = parse_nick(nick)[0] + if cloak not in var.AWAY: + cli.notice(nick, "You are not marked as away.") + return + var.AWAY.remove(cloak) + var.remove_away(cloak) + + cli.notice(nick, "You are no longer marked as away.") + + +else: # if OPT_IN_PING setting is on + @cmd("in", raw_nick=True) + @pmcmd("in", raw_nick=True) + def get_in(cli, nick, *rest): + """Get yourself in the ping list""" + nick, _, _, cloak = parse_nick(nick) + if cloak in var.PING_IN: + cli.notice(nick, "You are already on the list") + return + var.PING_IN.append(cloak) + var.add_ping(cloak) + + cli.notice(nick, "You are now on the list.") + + @cmd("out", raw_nick=True) + @pmcmd("out", raw_nick=True) + def get_out(cli, nick, *rest): + """Removes yourself from the ping list""" + nick, _, _, cloak = parse_nick(nick) + if cloak in var.PING_IN: + var.PING_IN.remove(cloak) + var.remove_ping(cloak) + + cli.notice(nick, "You are no longer in the list.") + return + cli.notice(nick, "You are not in the list.") + + @cmd("fping", admin_only=True) def fpinger(cli, nick, chan, rest): var.LAST_PING = None @@ -2903,4 +2940,4 @@ if botconfig.ALLOWED_NORMAL_MODE_COMMANDS and not botconfig.DEBUG_MODE: for pmcomd in list(PM_COMMANDS.keys()): if (pmcomd not in before_debug_mode_pmcommands and pmcomd not in botconfig.ALLOWED_NORMAL_MODE_COMMANDS): - del PM_COMMANDS[pmcomd] \ No newline at end of file + del PM_COMMANDS[pmcomd] diff --git a/settings/wolfgame.py b/settings/wolfgame.py index 7c041e5..1bf8ef8 100644 --- a/settings/wolfgame.py +++ b/settings/wolfgame.py @@ -13,8 +13,6 @@ NIGHT_TIME_LIMIT = 120 NIGHT_TIME_WARN = 0 # should be less than NIGHT_TIME_LIMIT DAY_TIME_LIMIT_WARN = 780 DAY_TIME_LIMIT_CHANGE = 120 # seconds after DAY_TIME_LIMIT_WARN has passed -START_WITH_DAY = False -WOLF_STEALS_GUN = False KILL_IDLE_TIME = 300 WARN_IDLE_TIME = 180 PART_GRACE_TIME = 7 @@ -80,6 +78,13 @@ RULES = ("#wolfgame channel rules: 1) Be nice to others. 2) Do not share informa "family-friendly. 7) Do not paste PM's from the bot during the game. "+ "8) Use common sense. 9) Waiting for timeouts is discouraged.") +# Other settings: +START_WITH_DAY = False +WOLF_STEALS_GUN = False # at night, the wolf can steal steal the victim's bullets + +OPT_IN_PING = False # instead of !away/!back, users can opt-in to be pinged +PING_IN = [] # cloaks of users who have opted in for ping + is_role = lambda plyr, rol: rol in ROLES and plyr in ROLES[rol] def plural(role): @@ -172,7 +177,7 @@ conn = sqlite3.connect("data.sqlite3", check_same_thread = False) with conn: c = conn.cursor() - c.execute('CREATE TABLE IF NOT EXISTS away (nick TEXT)') + c.execute('CREATE TABLE IF NOT EXISTS away (nick TEXT)') # whoops, i mean cloak, not nick c.execute('CREATE TABLE IF NOT EXISTS simple_role_notify (cloak TEXT)') # people who understand each role @@ -196,10 +201,12 @@ with conn: 'teamwins SMALLINT, individualwins SMALLINT, totalgames SMALLINT, '+ 'UNIQUE(player, role))')) - - - + if OPT_IN_PING: + c.execute('CREATE TABLE IF NOT EXISTS ping (cloak text)') + c.execute('SELECT * FROM ping') + for row in c: + PING_IN.append(row[0]) def remove_away(clk): @@ -218,7 +225,13 @@ def add_simple_rolemsg(clk): with conn: c.execute('INSERT into simple_role_notify VALUES (?)', (clk,)) - +def remove_ping(clk): + with conn: + c.execute('DELETE from ping where cloak=?', (clk,)) +def add_ping(clk): + with conn: + c.execute('INSERT into ping VALUES (?)', (clk,)) + def update_role_stats(acc, role, won, iwon):