Allow !fjoin to bypass stasis

Allow admins to fjoin people who are currently stasised without removing
their stasis entirely. Stasis is unaffected by this on its own, although
note that a game being played will still normally reduce the stasis
penalty for now, even if the stasised player actually played in the game
due to being fjoined.
This commit is contained in:
Janik Kleinhoff 2014-09-04 13:08:21 +02:00
parent 41b8740eb1
commit 6af09159a2

View File

@ -434,33 +434,38 @@ def fpinger(cli, nick, chan, rest):
pinger(cli, nick, chan, rest) pinger(cli, nick, chan, rest)
@cmd("join", "j", raw_nick=True) @cmd("join", "j")
def join(cli, nick, chann_, rest): def join(cli, nick, chann_, rest):
"""Either starts a new game of Werewolf or joins an existing game that has not started yet.""" """Either starts a new game of Werewolf or joins an existing game that has not started yet."""
pl = var.list_players() join_player(cli, nick)
def join_player(cli, player, who = None, forced = False):
if who is None:
who = player
pl = var.list_players()
chan = botconfig.CHANNEL chan = botconfig.CHANNEL
nick, _, __, cloak = parse_nick(nick)
if not var.OPPED: if not var.OPPED:
cli.notice(nick, "Sorry, I'm not opped in {0}.".format(chan)) cli.notice(who, "Sorry, I'm not opped in {0}.".format(chan))
cli.msg("ChanServ", "op " + botconfig.CHANNEL) cli.msg("ChanServ", "op " + botconfig.CHANNEL)
return return
cloak = None
try: try:
cloak = var.USERS[nick]['cloak'] cloak = var.USERS[player]['cloak']
if cloak is not None and cloak in var.STASISED: if cloak is not None and cloak in var.STASISED and not forced:
cli.notice(nick, "Sorry, but you are in stasis for {0} games.".format(var.STASISED[cloak])) cli.notice(who, "Sorry, but {0} in stasis for {1} game{2}.".format(
"you are" if player == who else player + " is", var.STASISED[cloak],
"s" if var.STASISED[cloak] != 1 else ""))
return return
except KeyError: except KeyError:
cloak = None pass
if var.PHASE == "none": if var.PHASE == "none":
cli.mode(chan, "+v", nick) cli.mode(chan, "+v", player)
var.ROLES["person"].append(nick) var.ROLES["person"].append(player)
var.PHASE = "join" var.PHASE = "join"
var.WAITED = 0 var.WAITED = 0
var.GAME_ID = time.time() var.GAME_ID = time.time()
@ -468,7 +473,7 @@ def join(cli, nick, chann_, rest):
var.CAN_START_TIME = datetime.now() + timedelta(seconds=var.MINIMUM_WAIT) var.CAN_START_TIME = datetime.now() + timedelta(seconds=var.MINIMUM_WAIT)
cli.msg(chan, ('\u0002{0}\u0002 has started a game of Werewolf. '+ cli.msg(chan, ('\u0002{0}\u0002 has started a game of Werewolf. '+
'Type "{1}join" to join. Type "{1}start" to start the game. '+ 'Type "{1}join" to join. Type "{1}start" to start the game. '+
'Type "{1}wait" to increase start wait time.').format(nick, botconfig.CMD_CHAR)) 'Type "{1}wait" to increase start wait time.').format(player, botconfig.CMD_CHAR))
# Set join timer # Set join timer
if var.JOIN_TIME_LIMIT: if var.JOIN_TIME_LIMIT:
@ -477,17 +482,17 @@ def join(cli, nick, chann_, rest):
t.daemon = True t.daemon = True
t.start() t.start()
elif nick in pl: elif player in pl:
cli.notice(nick, "You're already playing!") cli.notice(who, "{0}'re already playing!".format("You" if who == player else "They"))
elif len(pl) >= var.MAX_PLAYERS: elif len(pl) >= var.MAX_PLAYERS:
cli.notice(nick, "Too many players! Try again next time.") cli.notice(who, "Too many players! Try again next time.")
elif var.PHASE != "join": elif var.PHASE != "join":
cli.notice(nick, "Sorry, but the game is already running. Try again next time.") cli.notice(who, "Sorry, but the game is already running. Try again next time.")
else: else:
cli.mode(chan, "+v", nick) cli.mode(chan, "+v", player)
var.ROLES["person"].append(nick) var.ROLES["person"].append(player)
cli.msg(chan, '\u0002{0}\u0002 has joined the game and raised the number of players to \u0002{1}\u0002.'.format(nick, len(pl) + 1)) cli.msg(chan, '\u0002{0}\u0002 has joined the game and raised the number of players to \u0002{1}\u0002.'.format(player, len(pl) + 1))
if not cloak in var.JOINED_THIS_GAME: if not cloak in var.JOINED_THIS_GAME:
# make sure this only happens once # make sure this only happens once
var.JOINED_THIS_GAME.append(cloak) var.JOINED_THIS_GAME.append(cloak)
@ -528,7 +533,7 @@ def fjoin(cli, nick, chann_, rest):
noticed = False noticed = False
chan = botconfig.CHANNEL chan = botconfig.CHANNEL
if not rest.strip(): if not rest.strip():
join(cli, nick, chan, "") join_player(cli, nick, forced=True)
for a in re.split(" +",rest): for a in re.split(" +",rest):
a = a.strip() a = a.strip()
@ -546,7 +551,7 @@ def fjoin(cli, nick, chann_, rest):
if not is_fake_nick(a): if not is_fake_nick(a):
a = ul[ull.index(a.lower())] a = ul[ull.index(a.lower())]
if a != botconfig.NICK: if a != botconfig.NICK:
join(cli, a.strip(), chan, "") join_player(cli, a.strip(), forced=True, who=nick)
else: else:
cli.notice(nick, "No, that won't be allowed.") cli.notice(nick, "No, that won't be allowed.")