Git Product home page Git Product logo

lykos's Introduction

Lykos, the Open-Source Werewolf bot

General information

What does Open-Source mean?

Open-Source means that the code is available for free for everyone to view, download, use, and modify. We however have a License, which requires that you include it in all derivative works and other works which include lykos code.

What is Werewolf?

Werewolf is a popular party game, similar to and inspired by mafia. In Werewolf, several players take roles as either wolves or their allies, or as villagers - some with special powers - who try to figure out who the wolves are and eliminate them before it is too late. There may also be some other players who play towards their own goals, which may or may not help any side.

Where can I play this game?

We run an instance of the bot in the #werewolf channel on Libera. Off-topic discussion happens in #werewolf-meta on the same network, and channel operators can be reached in #werewolf-ops. There are also other networks listed in the Networks page of our official wiki. Keep in mind that, just because someone appears online, does not mean they are around or available to play.

For players

I've never played such a game before. How do I play?

You can join a new game with !join. There must be at least 6 players to be able to start a game. When the game is started, the bot will message you privately telling you your role, what command(s) you have access to as that role, and what your goal is. You may then send commands privately to the bot; for example see person. Some roles require you to use the command during the day, and sometimes in the channel. Make sure to pay attention to the message!

If you're a wolf or other wolf-aligned role, you probably have access to the wolfchat. To use it, simply message the bot, and your message will be relayed to all other wolfchat players. You will also get their messages.

The bot contains over 50 roles, so it can take a while to get used to all of them. Practice makes perfect!

As a player, what commands can I use?

Lykos has a host of commands which can be used for various purposes. You can view them on our wiki.

For bot operators

I want to play this bot on my own network, how can I do that?

The bot requires some setup before it can be up and running. Here are the required steps:

  • You need to have Python 3.7 or above installed on your machine or the server on which the bot will be running. Steps on how to install Python on your machine will not be covered here, although if you are using Windows, then you can simply download and install the official Python binaries.
  • If building Python from source, you will need to include SQLite3 as part of the building process, as the bot uses it.
  • To enable the ability to update the bot with the changes that we bring to it, you will need to download and install Git.
  • If your network supports it, create an account for your bot and give it automatic op upon joining your channel via your channel management service (typically the +O flag if using ChanServ).
  • Copy the file botconfig.example.yml to botconfig.yml (make sure to make a copy and not simply rename), and open it with your favourite text editor. The file is extensively commented with examples and additional info. Modify the sections below. If a setting is not present here, it means the default is fine for most cases.
    • transports: update to point to your IRC network
    • access: point this to your account so you can control the bot over IRC
    • logging: see the comments and update accordingly. For a test bot, you could log everything to stdout (as shown in the first group). If you choose to use transport, make sure you pick a channel and check the comments for more info

I entered everything correctly, but the bot doesn't work in some way. What can I do?

We can help you with these kinds of issues in our development channel, #lykos on Libera. Ask directly in the channel, and wait for someone to answer. Please do not message people directly, as that prevents other people from helping as well. People who are voiced (typically a '+' before their name in the user list, or a blue circle for Hexchat) are developers and are more likely to be able to help.

The bot works fine, but there's just something I'd like to tweak. Is that possible?

It absolutely is! For additional gameplay settings, see the wiki's Configuration page. You can copy and paste these settings into your botconfig.yml file, and change them as you wish. Time-related settings are in seconds. You will need to restart the bot for the changes to take effect.

If there is something that you would like to tweak but can't find the setting for it, you may ask in #lykos. It may be hidden somewhere, or may not exist. We are usually willing to add new settings to allow other bot owners to customize their bot to the fullest. You may also open an issue on our bug tracker.

The roles are nice, but I'd like to add my own. Can I do that?

Yes! You can create your own roles by putting them inside the roles folder. There is a base "skeleton" file src/roles/_skel.py that you can copy and paste to get some basic stuff in. You will need to define your own commands (if applicable) and register events. If you need assistance with this, we'll be happy to help you.

Can I also add a new game mode to go with my new role(s) or just to change things up?

That's also possible! See the existing gamemodes in src/gamemodes/ and the community modes in our community-modes repository for examples. Put custom modes into the gamemodes/ directory (not src/gamemodes/). Then, copy gamemodes/__init__.py.example to gamemodes/__init__.py so your bot loads them.

What admin commands can I use?

A list of admin commands is available on our wiki.

Our player base is mostly non-English speakers. Is there support for our language?

Not right now. However, Lykos is a community effort, and so we encourage you to submit your own translation! We invite you to communicate with us for questions on how to proceed.

We would like to do X with a role/gamemode, but the bot doesn't seem to support it. What can I do?

Let us know! We will do the best we can to accomodate third-party roles and modes, and make sure they work fine!

Additional information for bot operators

You can run the bot by doing ./wolfbot.py on Linux, or simply double-clicking the wolfbot.py file on Windows.

Credits

This bot wouldn't be what it is today without the contribution of many people. Here are some of those people:

jcao219: Original programmer

woffle / Skizzerz: Main developer
Vgr: Main developer

jacob1: Developer
nyuszika7h: Developer

Iciloo: Testing

Everyone who contributed to the code, no matter how small.
Everyone who opened issues in our bug tracker.
And, of course, to all the bot owners and players who kept this project alive all this time!

Special thanks to LaneAtomic for their work on the messages system, which made coding future features a lot easier.

lykos's People

Contributors

alchzh avatar atmunn avatar brrr2 avatar bryceroesner avatar cydrobolt avatar electricalabrocoma avatar emmiegit avatar fastlizard4 avatar fluffgfx avatar fndax avatar fudster avatar grimreaper avatar iamgreaser avatar iciloo avatar ilbelkyr avatar jacob1 avatar jedayoshi avatar kernelpanic3 avatar lutoma avatar meldra avatar mishacatskill avatar qtlunya avatar random-nick avatar sckasturi avatar silentspud avatar skizzerz avatar tacocatcodes avatar trigonoculus avatar vgr255 avatar wctaiwan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lykos's Issues

Add a "time" command.

This command informs the user the time remaining until the current phase of the game ends. Potentially useful, potentially spam-worthy.

Logging

Proper useful logging of all game mechanics (for debugging) is needed, including, but not limited to, what totem was given to whom and when.
Possibly held in memory until the end of a game and then written to disk.

Replace "the winners are" line with the team that won?

Currently, the bot says this at the end of a game:

<@lykos> Game lasted 09:35. 08:53 was day. 00:41 was night.
<@lykos> The wolf was Chelsie. The seer was woffle. The cultist was Mithadon. The jester was rika. The shaman was nyuszika7h. The cursed villager was auror.
<@lykos> The winners are Chelsie, Mithadon, and rika.

In big games, this list could get really long with everyone with a role being listed.

Is "The winners are..." line really needed? It's essentially adding more to the big list of nicks what already exist.

Would it be possible to simply replace the line with "The village team won" or "The wolf team won"?

An additional feature could be "The $x team won, brining their total wins to $y."

Night may end prematurely if a night role idles out after acting

How to reproduce:

  1. Start a game with (at least) two night roles other than wolf, and have them survive the first night.
  2. End the first day after e.g. seer has received an idle warning.
  3. Have all night roles but one act, including the idling role.
  4. Wait for seer to actually idle out.

Expected result: Night doesn't end until the remaining night role acts.

Actual result: Night ends immediately; the remaining night role gets no chance to act.

This is because var.SEEN has been added to already, but the idler's role isn't counted for determining how many roles have to have acted anymore in chk_nightdone.

Mode resets are sometimes delayed when game ends

Issue by ishanyx from 2014-01-02 00:38:59
Originally opened as https://github.com/nyuszika7h/seerwolf/issues/13


01190524 <@✓lykos​> Game over! All the wolves are dead! The villagers chop them up, BBQ
them, and have a hearty meal.
01190524 <@✓lykos​> Game lasted 06:27. 05:51 was day. 00:35 was night. 
01190524 <@✓lykos​> The wolf was Tuxedo[Qyou]. The seer was elky. The cursed villager was
rww.
01190531 <+✓jacob1​> :D
01190612 <@✓lykos​> As the sun sinks inexorably toward the horizon, turning the lanky pine
trees into fire-edged silhouettes, the villagers are reminded that very little time remains 
for them to reach a decision; if darkness falls before they have done so, the majority will
win the vote. No one will be lynched if there are no votes or an even split.
01190623 <+✓elky​> wat
01190636 -!- mode/##werewolf [+o ishanyx] by ChanServ
01190638 <+✓jacob1​> oh
01190640 <+✓jacob1​> is this still going?
01190641 <@ishanyx> lykos, what
01190643 <+✓jacob1​> um
01190643 <+✓jacob1​> lol
01190649 -!- mode/##werewolf [-m] by lykos
01190649 -!- mode/##werewolf [-vvvq elky jacob1 rww billion57!*@*] by lykos
01190649 -!- mode/##werewolf [-qq [ps]!*@* Tuxedo[Qyou]!*@*] by lykos

I have no idea what's causing this, I haven't noticed any consistent patterns, but often at the end of a game lykos waits several seconds to over a minute before updating channel modes. (The timestamp in the pasted logs is day/hour/minute/second.) This isn't network lag or high load on cadoth, it happens even when the bot is working perfectly fine otherwise. During the interval between the game ending and lykos waking up and fixing the modes, responses to commands in channel or PM are delayed too.

Harlot dies twice if lover

[23:04:28] @Lykos Night lasted �01:52�. It is now daytime. The villagers awake, thankful for surviving the night, and search the village...
[23:04:28] @Lykos The dead body of �Makiavel�, a �villager�, is found. Those remaining mourn the tragedy.
[23:04:28] @Lykos �SithNexus�, a �harlot�, made the unfortunate mistake of visiting a wolf's house last night and is now dead.
[23:04:28] @Lykos Saddened by the loss of their lover, �SithNexus�, a �harlot�, commits suicide.

Bot randomly fails to notice player quit/changed nick.

What the title says. I don't have account-notify or something enabled, but that's better than losing entirely the log of what happened. Timestamps are UTC-5. Happened on January 18th, 2015. Full, unfiltered log:

[07:52:39] <erry> !join
[07:52:39] * lykos sets mode: +v erry
[07:52:39] <@lykos> erry has started a game of Werewolf. Type "!join" to join. Type "!start" to start the game. Type "!wait" to increase start wait time.
[07:52:43] <NeonWabbit> Good work, erry.
[07:52:48] <u-ou> but how did you know?
[07:52:48] <+erry> :D
[07:52:49] <NeoMahler> :D
[07:52:50] <u-ou> !j
[07:52:50] * lykos sets mode: +v u-ou
[07:52:50] <@lykos> u-ou has joined the game and raised the number of players to 2.
[07:52:55] <greenpuffles> !j
[07:52:55] * lykos sets mode: +v greenpuffles
[07:52:56] <@lykos> greenpuffles has joined the game and raised the number of players to 3.
[07:53:37] <+greenpuffles> !game Lycan
[07:53:38] <@lykos> greenpuffles votes for the lycan game mode.
[07:53:48] <+erry> !roles lycan
[07:53:48] <@lykos> [7] wolf, hunter, lycan, seer, cursed villager [9] wolf(2), clone, lycan(2) [10] guardian angel, hunter(2), mayor [12] lycan(3), cursed villager(2) [15] traitor, detective, lycan(4), matchmaker [17] clone(2), sharpshooter, gunner [20] lycan(5)
[07:53:54] <+erry> we need at least 7 for that
[07:54:37] <+greenpuffles> !roles def
[07:54:37] <@lykos> [4] wolf, seer [6] cursed villager [7] cultist, shaman [8] traitor, -cultist, harlot, bureaucrat [9] crazed shaman [10] wolf cub, sharpshooter, gunner [11] matchmaker [12] werecrow [13] detective, assassin [15] wolf(2), hunter [16] monster [18] bodyguard [20] sorcerer, augur, cursed villager(2) [21] wolf(3), gunner(2) [23] amnesiac, mayor [24] hag
[07:55:00] <+greenpuffles> !game def
[07:55:01] <@lykos> greenpuffles votes for the default game mode.
[07:55:28] <NeoMahler> !j
[07:55:29] * lykos sets mode: +v NeoMahler
[07:55:29] <@lykos> NeoMahler has joined the game and raised the number of players to 4.
[07:56:23] <+NeoMahler> !leave
[07:56:23] <@lykos> NeoMahler suddenly falls over dead before the astonished villagers. New player count: 3
[07:56:23] * lykos sets mode: -v NeoMahler
[07:56:38] * NeoMahler is now known as NeoAbsent
[07:59:10] <+greenpuffles> JOIN GAME
[07:59:33] <+greenpuffles> JOIN GAME
[08:00:13] <+greenpuffles> !game def
[08:00:13] <@lykos> greenpuffles votes for the default game mode.
[08:00:22] <+greenpuffles> JOIN GAME
[08:00:47] <away> greenpuffles: can you not
[08:01:41] * greenpuffles is now known as orangepuffles
[08:02:13] * orangepuffles is now known as puffles
[08:03:56] <+puffles> !pony
[08:03:57] <@lykos> puffles tosses a pony into the air...
[08:03:57] <@lykos> The pony lands on hoof.
[08:05:00] <+puffles> !pony
[08:05:00] <@lykos> puffles tosses a pony into the air...
[08:05:01] <@lykos> The pony lands on hoof.
[08:05:05] <+puffles> !pony
[08:05:05] <@lykos> puffles tosses a pony into the air...
[08:05:06] <@lykos> The pony lands on hoof.
[08:05:09] <+puffles> !pony
[08:05:09] <@lykos> puffles tosses a pony into the air...
[08:05:09] <@lykos> The pony lands on plot.
[08:05:14] <+puffles> .
[08:07:29] <+puffles> !pony
[08:07:29] <@lykos> puffles tosses a pony into the air...
[08:07:30] <@lykos> The pony lands on hoof.
[08:12:16] <+u-ou> !quit
[08:12:17] <@lykos> u-ou is crushed to death by a falling tree. The villagers desperately try to save them, but it is too late. New player count: 2
[08:12:17] * lykos sets mode: -v u-ou
[08:18:15] <away> puffles: don't spam
[08:18:17] <+erry> D:
[08:18:38] * nimoot (~HomoSapie@unaffiliated/toomin) Quit (Ping timeout: 264 seconds)
[08:23:11] * NeoAbsent is now known as NeoMahler
[08:23:19] <NeoMahler> !j
[08:23:19] * lykos sets mode: +v NeoMahler
[08:23:20] <@lykos> NeoMahler has joined the game and raised the number of players to 3.
[08:23:26] <+NeoMahler> !ping
[08:23:27] <@ lykos> PING! Agent_Isai c74d CrissiD evilworm Hjalpa JonathanD mrs_girl NeonWabbit Pachirisu ParuNexus RyanDecarie splook u-ou
[08:26:32] <+NeoMahler> join!
[08:31:13] * Consuela (~Consuela@unaffiliated/stupid) Quit (Ping timeout: 252 seconds)
[08:31:53] * puffles is now known as morepuffles
[08:31:55] * Consuela (~Consuela@unaffiliated/stupid) has joined ##werewolf
[08:32:25] <+NeoMahler> !ping join!!
[08:32:25] <@lykos> PING! Agent_Isai c74d CrissiD evilworm Hjalpa JonathanD mrs_girl NeonWabbit Pachirisu ParuNexus RyanDecarie splook u-ou
[08:34:04] <+morepuffles> join!
[08:35:23] <+morepuffles> join game!
[08:40:35] <+morepuffles> join game!
[08:42:15] <+morepuffles> !pony
[08:42:15] <@lykos> morepuffles tosses a pony into the air...
[08:42:16] <@lykos> The pony lands on hoof.
[08:42:26] <+morepuffles> !leave
[08:42:30] <+morepuffles> !j
[08:42:31] * lykos sets mode: +v morepuffles
[08:42:31] <@lykos> morepuffles has joined the game and raised the number of players to 4.
[08:42:36] <+morepuffles> !start
[08:42:37] <@lykos> erry, puffles, NeoMahler, morepuffles: Welcome to Werewolf, the popular detective/social party game (a theme of Mafia). Using the default game mode.
[08:42:37] * lykos sets mode: +m
[08:42:38] <@lykos> It is now nighttime. All players check for PMs from me for instructions.
[08:42:44] <+erry> :o
[08:42:52] <+NeoMahler> :O
[08:42:53] <+erry> mv
[08:42:54] <+morepuffles> iam villager
[08:43:03] <@lykos> Night lasted 00:25. It is now daytime. The villagers awake, thankful for surviving the night, and search the village... 
[08:43:03] <@lykos> The dead body of puffles, a villager, is found. Those remaining mourn the tragedy.
[08:43:03] <@lykos> The villagers must now vote for whom to lynch. Use "!lynch <nick>" to cast your vote. 2 votes are required to lynch.
[08:43:53] <+erry> wait
[08:43:54] * ChanServ sets mode: +o nyuszika7h
[08:43:56] <@nyuszika7h> bot is broken
[08:43:57] <+erry> why are you cloning
[08:43:58] <@nyuszika7h> !fsrop
[08:44:02] <@nyuszika7h> !fstop
[08:44:02] <@lykos> nyuszika7h has forced the game to stop.
[08:44:02] <@lykos> Game lasted 01:25. 00:59 was day. 00:25 was night. 
[08:44:02] <@lykos> The wolf was NeoMahler. The seer was erry. The villagers were puffles and morepuffles.
[08:44:02] * lykos sets mode: -mvvv erry morepuffles NeoMahler
[08:44:03] <NeoMahler> :O
[08:44:06] <NeoMahler> XD
[08:44:12] <erry> nyuszika7h, what broke?
[08:44:19] <@nyuszika7h> it isn't devoicing people
[08:44:27] <erry> nyuszika7h, i think morepuffles was cloning :[
[08:44:47] <@nyuszika7h> well we have enough reasons to ban him anyway
[08:44:54] <erry> nyuszika7h, wait!
[08:44:56] <erry> i know what broke
[08:44:57] <morepuffles> no, i changed
[08:45:01] <erry> puffles joined as puffles, then /nicked
[08:45:01] <morepuffles> my nick
[08:45:04] <erry> but lykos kept both of them
[08:45:08] <erry> that's why the devoicing broke
[08:45:09] <away> lykos pls
[08:45:12] <morepuffles> yes
[08:45:18] * nyuszika7h sets mode: +b $a:Quackerpingu
[08:45:19] <erry> that... seems like a major bug
[08:45:23] * morepuffles was kicked by nyuszika7h (morepuffles)

Error with !votes

<Zhaofeng_Li> !votes
<lykos> Zhaofeng_Li: enchilado: 1 (kru), kru: 1 (enchilado)
<lykos> An error has occurred and has been logged.

[04/Aug/2014 05:47:21] Traceback (most recent call last):
  File "/home/lykos/lykos/modules/common.py", line 40, in on_privmsg
    fn(cli, rawnick, chan, h.lstrip())
  File "/home/lykos/lykos/tools/decorators.py", line 61, in innerf
    return f(*largs)
  File "/home/lykos/lykos/modules/wolfgame.py", line 809, in show_votes
    'vote.').format(nick, len(pl), votesneeded, avail)
ValueError: cannot switch from automatic field numbering to manual field specification

Traitor didn't win although they survived and didn't idle out/leave

[10:56:17] <+NecromancerMorty> !stats
[10:56:18] <@lykos> NecromancerMorty: �3� players: errietta, NecromancerMorty, Cydrobolt
[10:56:18] <@lykos> NecromancerMorty: It is currently day. There is �1� wolf, ��no�� seers, ��no�� shamans, �1� crazed shaman, ��no�� harlots, and �1� villager.
[10:56:24] <+Cydrobolt> can a woffle kill me
[10:56:34] <+NecromancerMorty> it's day
[10:56:36] <+Cydrobolt> nevermind
[10:56:37] <+Cydrobolt> last night
[10:56:47] <+Cydrobolt> is anyone a safe here
[10:56:49] <+Cydrobolt> !stats
[10:56:53] <+NecromancerMorty> I'm safe
[10:56:57] <+NecromancerMorty> !v err
[10:56:58] <@lykos> �NecromancerMorty� votes for �errietta�.
[10:57:00] <+Cydrobolt> !v err
[10:57:01] <@lykos> �Cydrobolt� votes for �errietta�.
[10:57:01] <@lykos> Under a lot of noise, the pitchfork-bearing villagers lynch �errietta�, who turned out to be... a �crazed shaman�.
[10:57:01] * lykos sets mode: -v+q errietta errietta!*@*
[10:57:01] <@lykos> Game over! There are the same number of wolves as uninjured villagers. The wolves overpower the villagers and win.
[10:57:01] <@lykos> Game lasted �09:23�. �04:35� was day. �04:47� was night. 
[10:57:01] <@lykos> The wolf was �Vgr�. The seer was �Andrio�. The traitor was �NecromancerMorty�. The crazed shaman was �errietta�. The bureaucrat was �kru�. The shaman was �rotta666�. The harlot was �Mp5shooter�. The cursed villager was �errietta�.
[10:57:02] <@lykos> The winner is �Vgr�.
[10:57:02] * lykos sets mode: -m

I was the sole winner, but NecromancerMorty should have won as well, as they did not idle out nor quit. Full log is here, as you may notice NecromancerMorty did quit, but rejoined back in the game shortly after.

Why can't you change your target as an assassin?

You are an assassin. Choose a target with "target ". If you die you will take out your target with you. If your target dies you may choose another one.
Players: foo, bar, foobar, baz
Because you forgot to select a target at night, you are now targeting baz.
target foobar
You may only target people at night.
target foobar
You have already chosen a target.

The text doesn't say that once you pick a target, it's permanent unless that player dies.

Plus, why does the bot auto-select a target for you instead of not having one selected? You could end up targeting a safe picked by the bot, getting killed and taking down a member of your own team.

Make stasis check both time and amount of games.

An idea that came up in Esper's #Werewolf was to make stasis look for amount of time elapsed since the game that applied stasis, since fewer games are played than on freenode, and so people who get stasised in a game might need to wait a large amount of time before being unstasised, or to have an admin manually remove their stasis (what we do) after some time being stasised.

Ratelimit !roles / !pstats

With the role list now really long, it might be worth ratelimiting it or sending the list in a notice or private message.

[11:17:31 P] <+Janthran> !roles
[11:17:32 P] <lykos> Janthran: There are 14 playing. [4] seer, wolf [6] cursed villager, jester [7] shaman, cultist [8] bureaucrat, traitor, harlot, cultist [9] crazed shaman [10] gunner, sharpshooter, wolf cub [11] matchmaker [12] werecrow [13] detective, assassin [15] hunter, wolf(2) [16] monster [18] bodyguard [20] cursed villager(2), sorcerer, augur [21] gunner(2), wolf(3) [23] amnesiac, mayor [24] hag 
[11:17:32 P] <+bcode> !roles
[11:17:33 P] <lykos> bcode: There are 14 playing. [4] seer, wolf [6] cursed villager, jester [7] shaman, cultist [8] bureaucrat, traitor, harlot, cultist [9] crazed shaman [10] gunner, sharpshooter, wolf cub [11] matchmaker [12] werecrow [13] detective, assassin [15] hunter, wolf(2) [16] monster [18] bodyguard [20] cursed villager(2), sorcerer, augur [21] gunner(2), wolf(3) [23] amnesiac, mayor [24] hag 
[11:17:46 P] <+Chiyo> !roles
[11:17:46 P] <+Chiyo> !roles
[11:17:47 P] <lykos> Chiyo: There are 14 playing. [4] seer, wolf [6] cursed villager, jester [7] shaman, cultist [8] bureaucrat, traitor, harlot, cultist [9] crazed shaman [10] gunner, sharpshooter, wolf cub [11] matchmaker [12] werecrow [13] detective, assassin [15] hunter, wolf(2) [16] monster [18] bodyguard [20] cursed villager(2), sorcerer, augur [21] gunner(2), wolf(3) [23] amnesiac, mayor [24] hag 
[11:17:47 P] <lykos> Chiyo: There are 14 playing. [4] seer, wolf [6] cursed villager, jester [7] shaman, cultist [8] bureaucrat, traitor, harlot, cultist [9] crazed shaman [10] gunner, sharpshooter, wolf cub [11] matchmaker [12] werecrow [13] detective, assassin [15] hunter, wolf(2) [16] monster [18] bodyguard [20] cursed villager(2), sorcerer, augur [21] gunner(2), wolf(3) [23] amnesiac, mayor [24] hag

Add !help for roles

Going to the wiki is more tedious/distracting than a !command to get help on a particular role; I don't know if we need to duplicate the entire wiki entry but wouldn't hurt if we did...

2nd traitor at 17p

Even with the recent GA change, games are very much in favor of the village side at large game sizes. During the transition from 15p to 20p no wolves are added, just a very powerful safe role. That's why I think another traitor should be at 17p. The game supports it fine.

In a recent game last night, wolves killed a villager night one, then I think gunner exploded, GA was killed (using the recent change) night two, detective killed night three, and seer killed night four. It really should have been a win or at least more fair.

Also there's the problem of det iding traitor and game being basically won by village :P

Seer accidentally contacting safe after death

Issue by kholerabbi from 2014-01-19 10:53:48 UTC
Originally opened as https://github.com/lykoss/lykos-next-old/issues/9


The problem

After they see a villager, the seer may choose to PM the villager to tell them that they're safe. However, if night ends immediately and the seer is killed, then it's a common issue that the seer will PM their safe after death.

This is against the rules but happens by accident all the time, simply because the seer may rush to inform their safe, not realising that they have died.

The solution

Players who use clients (such as irssi) that support a split notification window are able to see that they have died without switching back to the main channel—but many players don't have this option.

My suggested solution is to have lykos notify the seer that they have died, so that the seer does not have to switch back to the main channel before contacting their safe.

Furthermore, more often than not, I suspect this situation is due to the seer being the last night role to take action. In this case, lykos knows in advance that the seer is going to die and could customise the message. Indeed, lykos could choose not to inform the seer at all (e.g. “Sorry, you died before you managed to complete your vision”) which, although the safest option, might remove some of the fun as they continue to observe the game.

I've been playing this game off and on for a couple of years, and this has always been a problem. So it would be very nice to at least try to see if we can find a solution.

Mode +m and quiet

lykos sets +m on the channel at the start of the game meaning that nobody can talk except if op'd or voiced.
So i'm wondering is it really necessary to set quiet on the user that got lynched or died?

Make it so lykos can't troll voters

Due to the way the voting system works, it is still possible for the bot to pick game modes that were not explicitly voted for. It makes far more sense that once people have voted for modes that only the modes voted for will show up.

Topics to consider for discussion:

  • Do we want it so that we need a critical mass of votes (say 20% of players having voted for a gamemode) before we exclude modes not voted for?
  • Do we want to adjust the "special" modes so that it only needs half of the voters to vote for it rather than half of the total players?

My personal opinion is no and yes, respectively, as I believe that will encourage more participation in voting for game modes if you literally count for nothing at all if you don't vote.

Influence totem does not seem to do anything

[23:02:41] < lykos> You are a �shaman�. You can select a player to receive a totem each night by using "give ". You may give yourself a totem, but you may not give the same player a totem two nights in a row.
[23:02:41] < lykos> You have the �influence� totem. Votes by the player who is given this totem count twice.
[23:02:42] < lykos> Players: Corin, deSouza, modulus, Mandog, Jaekke, SithNexus, Sir_Burpalot, Makiavel, Polsaker, aeth, Vgr
[23:04:27] < Vgr> give vgr
[23:04:28] < lykos> You have given a totem of influence to �Vgr�.

[...]

[23:07:37] <+Vgr> !votes
[23:07:37] @Lykos Vgr: Mandog: 1 (Polsaker)
[23:07:38] @Lykos Vgr: �8� players, �5� votes required to lynch, �8� players available to vote. �0� players have refrained from voting.
[23:07:44] <+deSouza> man
[23:07:45] <+Mandog> wait what?
[23:07:49] <+deSouza> im getting sleepy
[23:07:49] <+Polsaker> just randovoting
[23:07:52] <+Mandog> yes de?
[23:08:00] <+Mandog> well fine
[23:08:00] <+Vgr> !vote man
[23:08:01] @Lykos �Vgr� votes for �Mandog�.
[23:08:03] <+Vgr> !votes
[23:08:03] @Lykos Vgr: Mandog: 2 (Polsaker Vgr)
[23:08:04] <+Polsaker> !vote man
[23:08:04] @Lykos Vgr: �8� players, �5� votes required to lynch, �8� players available to vote. �0� players have refrained from voting.
[23:08:04] @Lykos �Polsaker� votes for �Mandog�.
[23:08:05] <+Mandog> i'm not important anyway
[23:08:08] <+Jaekke> !lynch man
[23:08:08] @Lykos �Jaekke� votes for �Mandog�.
[23:08:10] <+Mandog> kill a villager
[23:08:11] <+Corin> !vote Mandog
[23:08:11] @Lykos �Corin� votes for �Mandog�.
[23:08:11] @Lykos The villagers, after much debate, finally decide on lynching �Mandog�, who turned out to be... a �villager�.

It was definitely on the day I got the influence totem, I double-checked. I was also sharpshooter (killed a wolf). It should have lynched Mandog after Jaekke voted, not after Corin did.

!help ignores !notice

(in /msg) [06:29:55 P] !notice
(a notice) [06:29:56 P] -lykos- Gameplay interactions will now use PRIVMSG for you.
(in /msg) [06:29:58 P] help
(a notice) [06:29:58 P] -lykos- Commands: admins, ....

Can we add another idled out death line?

An example idle-out-death-line is:

Makiavel didn't get out of bed for a very long time and has been found dead. The survivors bury the villager's body.

Could we add:

$name became infected with the idle virus. Sadly, they did not respond to treatment and subsequently died.

Require two people to start

A suggestion discussing in ##werewolf is requiring two people to start a game. This would prevent an individual from starting the game prematurely, which is fairly common if they were unaware the other players were waiting for a larger number for more roles. It would also allow for more people to be ready to play the game when it begins, instead of someone starting the game when other people are afk.

Unneeded text in fstasis

[08:16:41 P] fstasis
[08:16:41 P] current illegal joins: defaultdict(<class 'int'>, {})

Could the "defaultdict..." be removed?

The same applies if there is someone in stasis too.

[08:21:24 P] fstasis
[08:21:24 P] current illegal joins: defaultdict(<class 'int'>, {'example/cloak': 1})

Could this maybe changed to:

Currently in stasis: @example/cloak1 1, @example/cloak2 1

New player count isn't displayed if someone parts

!join
foobar has joined the game and raised the number of players to 7.

  • +Foo (~Foo@foo) has left ##werewolf
    foo, a person, ate some poisonous berries and has died.
    <+bar> !leave
    bar, a person, has died of an unknown disease. New player count: 5

a new command needed: "!joinif <number>"

Sometimes I want to play the game if at least 8 people is playing.

So it can be like that:

fka: !joinif 8
lycan: You will be joined to the next 8 or more people game.

And, if anyone starts the game before 8 people are joined, it'll be started without me. But it'll remember my choice so whenever it's 8 people game I'll be joined. And after my name, I've to !joinif or !join again as usual.

IDK if I can tell well or not but I think you all got it :)

Moved from https://github.com/skizzerz/lykos/issues/56

!stats, when not in a game, ignores !notice settings.

This is from ##werewolf

[08:55:19 P] * ChanServ sets mode: +o Chiyo
[08:55:49 P] !stats
[08:55:49 P] -lykos- Chiyo: 7 players: ...
[08:55:50 P] -lykos- Chiyo: It is currently ...
[08:55:53 P] !notice
[08:55:53 P] -lykos- The bot will now always NOTICE you.

The bot sent the stats as a notice, ignoring !notice's preferences.

[08:55:59 P] !notice
[08:55:59 P] -lykos- Gameplay interactions will now use PRIVMSG for you.
[08:56:01 P] !stats
[08:56:01 P] -lykos- Chiyo: 7 players: ...
[08:56:01 P] -lykos- Chiyo: It is currently day. ...

The bot is saying that it will send messages, but again sends a notice.

If the command is sent in a private message, it will reply in a private message.

ghost's alignment in !revealroles is unclear

05 141013 [freenode] -lykos(lykos@unaffiliated/nyuszika7h/bot/lykos)- wolf: mikicat | traitor: rika | amnesiac: NeoMahler (will become vengeful ghost) | seer: Axew | shaman: t0fu|work (gave retribution totem to NeoMahler) | villager: Dabo, Vgr | cursed villager: t0fu|work | dead vengeful ghost: bcode (villagers)

In this game bcode died of an exploding gun and was therefore on wolfteam, against village. If I hadn't known exploding guns counted as being killed by villagers, I would have assumed this listing was saying he was on the village team. The other status notes are much clearer. It should probably say something like (against villagers) here to remove the ambiguity.

Werekitten?

So, erry bcode, but still giving credit to erry suggested the idea of a werekitten. Now while I can't think of a role where this could be in use, but I did think that:

  • A werekitten is something you randomly got as a wolf cub so instead of it appearing as "wolf cub" it would appear as "were kitten", but it's the same role.
  • A preference you could set. Again, it's not a new role, but it would give you the label of "werekitten" every time you got the wolf cub role.

Thoughts?

Mysterious plague counted as village win

At the moment, if neither seer nor wolves act, the game is counted as a village win (the wolves all die of a mysterious plague). Notably, the seer (who idled) will still win, and all wolfteam-aligned players will lose even if they had no ability to act.

Someone (@ishanyx?) suggested that seer and wolves are automatically assigned stasis in this case; others suggested the set of roles "essential" for this purpose should be adjusted. Either way, the current approach unfairly penalizes traitors who in fact spent the night yelling at their idling co-wolves to wake up and kill.

Make mad scientist skip over dead people

Let's say join order is A B C D and B is scientist. If C dies night 1 and B is lynched, this would change it so that both A and D would die as well instead of just A.

Should be configurable, both by an on/off switch as well as a number of players based on how large game was started at (as skipping over dead people is OP in small games, but needed in larger ones).

Respond to CTCP PING requests ;)

It might be nice if lykos responded to CTCP PING requests, to allow players to test their connection lag to the bot. That way, a player can easily find out how long it takes until lykos receives a command from them.

Ideas for new totems (give some ideas!)

I've been meaning to add a black/wolf shaman to lykos for a while now, and I've already done the architecture changes that will let us add another shaman with very few code changes. However, to be viable, it would need some totems on its own (that it could share with crazed, probably). Here are the totems I thought of for this (few ones so far, I had more but forgot, this is why I'm opening this issue):

  • Deceit totem; the person who has this totem is seen as wolf if they're villager-aligned, and as villager if they're wolf-aligned.

Ideas? I would like 4-5 totems for wolfteam to use, instead or in addition to existing ones (lycanthropy totem could be a lot of fun), but first need to draw out what we want and what we don't want.

fstasis requires an exact match in order to apply or remove

[06:46:09 P] * ChiyoTest (~Chiyo@pdpc/supporter/active/chiyo) has joined ##werewolf

If you try and apply a stasis, you need to use the nick exactly as it appears as shown below:

[06:48:08 P] fstasis chiyotest 1
[06:48:08 P] Sorry, that user cannot be found.
[06:49:51 P] fstasis ChiyoTest 1
[06:49:51 P] ChiyoTest is now in stasis for 1 games

It appears this only applies to applying/removing stasis manually.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.