Browse Source

Add option for Vgr's reverse (opt-in) ping mode

master
Jimmy Cao 12 years ago
parent
commit
3311735ae3
  1. 105
      modules/wolfgame.py
  2. 27
      settings/wolfgame.py

105
modules/wolfgame.py

@ -247,9 +247,16 @@ def pinger(cli, nick, chan, rest): @@ -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): @@ -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): @@ -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: @@ -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]
del PM_COMMANDS[pmcomd]

27
settings/wolfgame.py

@ -13,8 +13,6 @@ NIGHT_TIME_LIMIT = 120 @@ -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 @@ -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) @@ -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: @@ -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): @@ -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):

Loading…
Cancel
Save