This takes a different code path because of slightly different conditions; in the first case, the ident and host are both known, and so the instance is hashable. Being hashable, it can be checked for set containment, and exactly one instance in that set will be equal (since the hash is based off of the ident and host, and the comparisons check for all non-None attributes, two instances cannot possibly be equal while having a different hash). In the second case (the new one), however, at least the ident or the host is missing, and so the hash cannot be calculated. This means that two instances may compare equal and hash to different values (since only non-None attributes are compared), so we need to run through the entire set no matter what to make sure that one - and only one - instance in that set compares equal with the new one. We can't know in advance whether or not there is an instance that compares equal to the new one in that set, nor can we know if there are multiple instances that are going to compare equal. The two code paths are separated so that the difference in functionality is obvious (and this commit description, as well as the comment in the code, should help with that), and that the distinction remains clear.
This is the Werewolf game bot for ##werewolf on freenode. It's a fork of lycanthrope, which was the last bot used in #wolfgame before it died.
We have an active community, and we'd love for you to join us!
Running your own copy
You need Python 3.3 or newer to run the bot. Python 3.4 and higher is recommended.
Copy botconfig.py.example
to botconfig.py
and modify the settings as needed. You can also copy-paste individual settings from src/settings.py
into botconfig.py
if you want to modify them. You may also add or customize your own game modes by renaming gamemodes.py.example
to gamemodes.py
and using the same layout used in src/gamemodes.py
.
Note: you should never alter files under the src
folder directly (unless you are submitting a change to the code), use botconfig.py
and gamemodes.py
for related changes.
To start the bot, run ./wolfbot.py
. You can use --verbose
to log all raw IRC messages and --debug
to enable some debugging features. These options should not be used in production.