Merge remote-tracking branch 'upstream/master'

Conflicts:
	modules/wolfgame.py
This commit is contained in:
skizzerz 2014-08-05 11:16:52 -05:00
commit 9e4d8d7017
3 changed files with 60 additions and 61 deletions

View File

@ -1,35 +1,16 @@
Dependencies
------------
This is the game bot for ##werewolf on freenode. It's a continutation of
[lycanthrope][1], which has become inactive. We have an active community, and
we'd love for you to join us!
- Python 3.2 or higher
# Running the bot
Configuration
-------------
If you wish to run your own copy of the bot, all you need is Python 3.2 or a
newer version.
Copy `botconfig.py.example` to `botconfig.py` and modify the settings as needed.
If desired, edit `settings/wolfgame.py` to modify game settings.
Starting the bot
----------------
To start the bot, run `./wolfbot.py`. You can optionally use `--debug` or
`--verbose`.
To start the bot, you can simply execute `wolfbot.py`:
$ ./wolfbot.py
Debug mode can be enabled with the `--debug` argument:
$ ./wolfbot.py --debug
Verbose logging can be enabled with the `--verbose` argument:
$ ./wolfbot.py --verbose
Playing the game
----------------
You can find us in ``##werewolf`` on [freenode][1] <sup>[(webchat)][2]</sup>. The
bot is running there and we have an active community. We'd love for you to join
us!
[1]: https://freenode.net/
[2]: http://webchat.freenode.net?channels=%23%23werewolf
[1]: https://github.com/LycanthropeTheGreat/lycanthrope

View File

@ -113,9 +113,13 @@ def connect_callback(cli):
prepare_stuff = hook("endofmotd", hookid=294)(prepare_stuff)
def mustregain(cli, *blah):
if not botconfig.PASS:
return
cli.ns_regain()
def mustrelease(cli, *rest):
if not botconfig.PASS:
return # prevents the bot from trying to release without a password
cli.ns_release()
cli.nick(botconfig.NICK)

View File

@ -949,41 +949,43 @@ def chk_decision(cli, force = ""):
break
@cmd("votes")
@cmd('votes')
def show_votes(cli, nick, chan, rest):
"""Displays the voting statistics."""
if var.PHASE in ("none", "join"):
cli.notice(nick, "No game is currently running.")
return
if var.PHASE != "day":
if var.PHASE != 'day':
cli.notice(nick, "Voting is only during the day.")
return
if (var.LAST_VOTES and
var.LAST_VOTES + timedelta(seconds=var.VOTES_RATE_LIMIT) > datetime.now()):
cli.notice(nick, ("This command is rate-limited." +
"Please wait a while before using it again."))
if (chan != nick and var.LAST_VOTES and var.VOTES_RATE_LIMIT and
var.LAST_VOTES + timedelta(seconds=var.VOTES_RATE_LIMIT) >
datetime.now()):
cli.notice(nick, ('This command is rate-limited. Please wait a while '
'before using it again.'))
return
pl = var.list_players()
if nick in pl:
if chan != nick and nick in pl:
var.LAST_VOTES = datetime.now()
if not var.VOTES.values():
msg = nick+": No votes yet."
if nick in pl:
var.LAST_VOTES = None # reset
else:
votelist = ["{0}: {1} ({2})".format(votee,
len(var.VOTES[votee]),
" ".join(var.VOTES[votee]))
for votee in var.VOTES.keys()]
msg = "{0}: {1}".format(nick, ", ".join(votelist))
msg = nick+ ': No votes yet.'
if nick in pl:
if nick in pl:
var.LAST_VOTES = None # reset
else:
votelist = ['{}: {} ({})'.format(votee,
len(var.VOTES[votee]),
' '.join(var.VOTES[votee]))
for votee in var.VOTES.keys()]
msg = '{}: {}'.format(nick, ', '.join(votelist))
if chan == nick or nick in pl:
cli.msg(chan, msg)
else:
cli.notice(nick, msg)
@ -991,15 +993,20 @@ def show_votes(cli, nick, chan, rest):
pl = var.list_players()
avail = len(pl) - len(var.WOUNDED) - len(var.ASLEEP)
votesneeded = avail // 2 + 1
the_message = ("{0}: \u0002{1}\u0002 players, \u0002{2}\u0002 votes "+
"required to lynch, \u0002{3}\u0002 players available " +
"to vote.").format(nick, len(pl), votesneeded, avail)
if nick in pl:
the_message = ('{}: \u0002{}\u0002 players, \u0002{}\u0002 votes '
'required to lynch, \u0002{}\u0002 players available to '
'vote.').format(nick, len(pl), votesneeded, avail)
if chan == nick or nick in pl:
cli.msg(chan, the_message)
else:
cli.notice(nick, the_message)
@pmcmd('votes')
def show_votes_pm(cli, nick, rest):
show_votes(cli, nick, nick, rest)
def chk_traitor(cli):
wcl = copy.copy(var.ROLES["wolf cub"])
@ -5432,18 +5439,23 @@ if botconfig.DEBUG_MODE or botconfig.ALLOWED_NORMAL_MODE_COMMANDS:
@cmd("fgame", admin_only=True)
def game(cli, nick, chan, rest):
def fgame(cli, nick, chan, rest):
pl = var.list_players()
if var.PHASE == "none":
cli.notice(nick, "No game is currently running.")
if var.PHASE == 'none':
cli.notice(nick, 'No game is currently running.')
return
if var.PHASE != "join":
cli.notice(nick, "Werewolf is already in play.")
if var.PHASE != 'join':
cli.notice(nick, 'Werewolf is already in play.')
return
if nick not in pl:
cli.notice(nick, "You're currently not playing.")
if nick not in pl and nick not in botconfig.ADMINS + botconfig.OWNERS:
cli.notice(nick, 'You\'re currently not playing.')
return
rest = rest.strip().lower()
if rest:
if cgamemode(cli, rest):
cli.msg(chan, ("\u0002{0}\u0002 has changed the "+
@ -5451,14 +5463,16 @@ if botconfig.DEBUG_MODE or botconfig.ALLOWED_NORMAL_MODE_COMMANDS:
def fgame_help(args = ""):
args = args.strip()
if not args:
return "Available game mode setters: "+ ", ".join(var.GAME_MODES.keys())
return 'Available game mode setters: ' + ', '.join(var.GAME_MODES.keys())
elif args in var.GAME_MODES.keys():
return var.GAME_MODES[args].__doc__
else:
return "Game mode setter {0} not found.".format(args)
return 'Game mode setter \u0002{}\u0002 not found.'.format(args)
game.__doc__ = fgame_help
fgame.__doc__ = fgame_help
# DO NOT MAKE THIS A PMCOMMAND ALSO