nonebot-plugin-werewolf 1.1.6__py3-none-any.whl → 1.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. nonebot_plugin_werewolf/__init__.py +1 -1
  2. nonebot_plugin_werewolf/config.py +76 -18
  3. nonebot_plugin_werewolf/constant.py +54 -46
  4. nonebot_plugin_werewolf/exception.py +2 -4
  5. nonebot_plugin_werewolf/game.py +193 -166
  6. nonebot_plugin_werewolf/matchers/__init__.py +1 -0
  7. nonebot_plugin_werewolf/matchers/depends.py +4 -4
  8. nonebot_plugin_werewolf/matchers/edit_behavior.py +205 -0
  9. nonebot_plugin_werewolf/matchers/edit_preset.py +11 -11
  10. nonebot_plugin_werewolf/matchers/message_in_game.py +3 -1
  11. nonebot_plugin_werewolf/matchers/poke/chronocat_poke.py +8 -5
  12. nonebot_plugin_werewolf/matchers/poke/ob11_poke.py +3 -3
  13. nonebot_plugin_werewolf/matchers/start_game.py +213 -175
  14. nonebot_plugin_werewolf/matchers/superuser_ops.py +3 -3
  15. nonebot_plugin_werewolf/models.py +31 -19
  16. nonebot_plugin_werewolf/player_set.py +10 -8
  17. nonebot_plugin_werewolf/players/__init__.py +1 -1
  18. nonebot_plugin_werewolf/players/can_shoot.py +15 -15
  19. nonebot_plugin_werewolf/players/civilian.py +1 -1
  20. nonebot_plugin_werewolf/players/guard.py +16 -14
  21. nonebot_plugin_werewolf/players/hunter.py +1 -1
  22. nonebot_plugin_werewolf/players/idiot.py +3 -3
  23. nonebot_plugin_werewolf/players/{joker.py → jester.py} +4 -5
  24. nonebot_plugin_werewolf/players/player.py +93 -29
  25. nonebot_plugin_werewolf/players/prophet.py +11 -10
  26. nonebot_plugin_werewolf/players/werewolf.py +63 -31
  27. nonebot_plugin_werewolf/players/witch.py +29 -12
  28. nonebot_plugin_werewolf/players/wolfking.py +1 -1
  29. nonebot_plugin_werewolf/utils.py +106 -7
  30. {nonebot_plugin_werewolf-1.1.6.dist-info → nonebot_plugin_werewolf-1.1.8.dist-info}/METADATA +27 -20
  31. nonebot_plugin_werewolf-1.1.8.dist-info/RECORD +35 -0
  32. {nonebot_plugin_werewolf-1.1.6.dist-info → nonebot_plugin_werewolf-1.1.8.dist-info}/WHEEL +1 -1
  33. nonebot_plugin_werewolf-1.1.6.dist-info/RECORD +0 -34
  34. {nonebot_plugin_werewolf-1.1.6.dist-info → nonebot_plugin_werewolf-1.1.8.dist-info}/LICENSE +0 -0
  35. {nonebot_plugin_werewolf-1.1.6.dist-info → nonebot_plugin_werewolf-1.1.8.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@ from .player import Player
6
6
  from .werewolf import Werewolf
7
7
 
8
8
 
9
- @Player.register_role(Role.WolfKing, RoleGroup.Werewolf)
9
+ @Player.register_role(Role.WOLFKING, RoleGroup.WEREWOLF)
10
10
  class WolfKing(CanShoot, Werewolf):
11
11
  @override
12
12
  async def notify_role(self) -> None:
@@ -1,20 +1,32 @@
1
+ import abc
1
2
  import functools
2
3
  import itertools
3
4
  from collections import defaultdict
4
- from typing import TYPE_CHECKING, Any, ClassVar, Generic, TypeVar, cast
5
+ from typing import TYPE_CHECKING, Any, ClassVar, Generic, ParamSpec, TypeVar
5
6
 
6
7
  import anyio
7
8
  import anyio.streams.memory
8
- from nonebot_plugin_alconna import UniMessage
9
+ from nonebot.adapters import Bot, Event
10
+ from nonebot.internal.matcher import current_bot
11
+ from nonebot_plugin_alconna.uniseg import (
12
+ Button,
13
+ FallbackStrategy,
14
+ Keyboard,
15
+ Receipt,
16
+ Target,
17
+ UniMessage,
18
+ )
9
19
  from nonebot_plugin_uninfo import Session
10
20
 
11
- from .constant import STOP_COMMAND
21
+ from .config import config
22
+ from .constant import STOP_COMMAND, stop_command_prompt
12
23
 
13
24
  if TYPE_CHECKING:
14
25
  from .player_set import PlayerSet
15
26
  from .players import Player
16
27
 
17
28
  T = TypeVar("T")
29
+ P = ParamSpec("P")
18
30
 
19
31
 
20
32
  def check_index(text: str, arrlen: int) -> int | None:
@@ -106,7 +118,10 @@ def as_player_set(*player: "Player") -> "PlayerSet":
106
118
 
107
119
 
108
120
  class ObjectStream(Generic[T]):
109
- __unset = object()
121
+ class Unset: ...
122
+
123
+ __UNSET: ClassVar[Unset] = Unset()
124
+
110
125
  _send: anyio.streams.memory.MemoryObjectSendStream[T]
111
126
  _recv: anyio.streams.memory.MemoryObjectReceiveStream[T]
112
127
  _closed: anyio.Event
@@ -119,7 +134,7 @@ class ObjectStream(Generic[T]):
119
134
  await self._send.send(obj)
120
135
 
121
136
  async def recv(self) -> T:
122
- result = self.__unset
137
+ result: Any = self.__UNSET
123
138
 
124
139
  async def _recv() -> None:
125
140
  nonlocal result
@@ -134,10 +149,10 @@ class ObjectStream(Generic[T]):
134
149
  tg.start_soon(_recv)
135
150
  tg.start_soon(_cancel)
136
151
 
137
- if result is self.__unset:
152
+ if result is self.__UNSET:
138
153
  raise anyio.EndOfStream
139
154
 
140
- return cast(T, result)
155
+ return result
141
156
 
142
157
  def close(self) -> None:
143
158
  self._closed.set()
@@ -148,3 +163,87 @@ class ObjectStream(Generic[T]):
148
163
 
149
164
  async def wait_closed(self) -> None:
150
165
  await self._closed.wait()
166
+
167
+
168
+ def _btn(label: str, text: str, /) -> Button:
169
+ return Button(flag="input", label=label, text=text)
170
+
171
+
172
+ def add_stop_button(msg: str | UniMessage, label: str | None = None) -> UniMessage:
173
+ if isinstance(msg, str):
174
+ msg = UniMessage.text(msg)
175
+
176
+ stop = stop_command_prompt()
177
+ return msg.keyboard(_btn(label or stop, stop))
178
+
179
+
180
+ def add_players_button(msg: str | UniMessage, players: "PlayerSet") -> UniMessage:
181
+ if isinstance(msg, str):
182
+ msg = UniMessage.text(msg)
183
+
184
+ pls = list(enumerate(players, 1))
185
+ while pls:
186
+ msg = msg.keyboard(*(_btn(p.name, str(i)) for i, p in pls[:3]))
187
+ pls = pls[3:]
188
+ return msg
189
+
190
+
191
+ class SendHandler(abc.ABC, Generic[P]):
192
+ bot: Bot
193
+ target: Event | Target
194
+ reply_to: bool | None = None
195
+ last_msg: UniMessage | None = None
196
+ last_receipt: Receipt | None = None
197
+
198
+ def update(self, target: Event | Target, bot: Bot | None = None) -> None:
199
+ self.bot = bot or current_bot.get()
200
+ self.target = target
201
+
202
+ async def _edit(self) -> None:
203
+ last = self.last_receipt
204
+ if (
205
+ config.enable_button
206
+ and self.last_msg is not None
207
+ and last is not None
208
+ and last.editable
209
+ ):
210
+ await last.edit(self.last_msg.exclude(Keyboard))
211
+
212
+ async def _send(self, message: UniMessage) -> None:
213
+ if not config.enable_button:
214
+ message = message.exclude(Keyboard)
215
+ receipt = await message.send(
216
+ target=self.target,
217
+ bot=self.bot,
218
+ reply_to=self.reply_to,
219
+ fallback=FallbackStrategy.ignore,
220
+ )
221
+ self.last_msg = message
222
+ self.last_receipt = receipt
223
+
224
+ @abc.abstractmethod
225
+ def solve_msg(
226
+ self,
227
+ msg: UniMessage,
228
+ *args: P.args,
229
+ **kwargs: P.kwargs,
230
+ ) -> UniMessage:
231
+ raise NotImplementedError
232
+
233
+ async def send(
234
+ self,
235
+ msg: str | UniMessage,
236
+ *args: P.args,
237
+ **kwargs: P.kwargs,
238
+ ) -> Receipt:
239
+ msg = UniMessage.text(msg) if isinstance(msg, str) else msg
240
+ msg = self.solve_msg(msg, *args, **kwargs)
241
+
242
+ async with anyio.create_task_group() as tg:
243
+ tg.start_soon(self._edit)
244
+ tg.start_soon(self._send, msg)
245
+
246
+ if TYPE_CHECKING:
247
+ assert self.last_receipt is not None
248
+
249
+ return self.last_receipt
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: nonebot-plugin-werewolf
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: 适用于 Nonebot2 的狼人杀插件
5
5
  Author-email: wyf7685 <wyf7685@163.com>
6
6
  License: MIT
@@ -10,12 +10,12 @@ Project-URL: bug-tracker, https://github.com/wyf7685/nonebot-plugin-werewolf/iss
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
- Requires-Dist: nonebot2 >=2.3.3
14
- Requires-Dist: nonebot-plugin-alconna >=0.52.1
15
- Requires-Dist: nonebot-plugin-localstore >=0.7.1
16
- Requires-Dist: nonebot-plugin-uninfo >=0.4.0
17
- Requires-Dist: nonebot-plugin-waiter >=0.7.1
18
- Requires-Dist: anyio >=4.6.0
13
+ Requires-Dist: nonebot2>=2.3.3
14
+ Requires-Dist: nonebot-plugin-alconna>=0.52.1
15
+ Requires-Dist: nonebot-plugin-localstore>=0.7.1
16
+ Requires-Dist: nonebot-plugin-uninfo>=0.4.0
17
+ Requires-Dist: nonebot-plugin-waiter>=0.7.1
18
+ Requires-Dist: anyio>=4.6.0
19
19
 
20
20
  <div align="center">
21
21
  <a href="https://v2.nonebot.dev/store">
@@ -32,20 +32,13 @@ _✨ 简单的狼人杀插件 ✨_
32
32
  [![license](https://img.shields.io/github/license/wyf7685/nonebot-plugin-werewolf.svg)](./LICENSE)
33
33
  [![pypi](https://img.shields.io/pypi/v/nonebot-plugin-werewolf?logo=python&logoColor=edb641)](https://pypi.python.org/pypi/nonebot-plugin-werewolf)
34
34
  [![python](https://img.shields.io/badge/python-3.10+-blue?logo=python&logoColor=edb641)](https://www.python.org/)
35
-
36
- [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
37
35
  [![ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
38
- [![isort](https://img.shields.io/badge/%20imports-isort-%231674b1)](https://pycqa.github.io/isort/)
39
- [![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
40
- [![pyright](https://img.shields.io/badge/types-pyright-797952.svg?logo=python&logoColor=edb641)](https://github.com/Microsoft/pyright)
41
36
 
42
37
  [![wakatime](https://wakatime.com/badge/user/b097681b-c224-44ec-8e04-e1cf71744655/project/70a7f68d-5625-4989-9476-be6877408332.svg)](https://wakatime.com/badge/user/b097681b-c224-44ec-8e04-e1cf71744655/project/70a7f68d-5625-4989-9476-be6877408332)
43
38
  [![pre-commit](https://results.pre-commit.ci/badge/github/wyf7685/nonebot-plugin-werewolf/master.svg)](https://results.pre-commit.ci/latest/github/wyf7685/nonebot-plugin-werewolf/master)
44
- [![pyright](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/pyright.yml/badge.svg?branch=master&event=push)](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/pyright.yml)
45
- [![publish](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/pypi-publish.yml/badge.svg)](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/pypi-publish.yml)
39
+ [![lint](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/lint.yml/badge.svg?branch=master&event=push)](https://github.com/wyf7685/nonebot-plugin-werewolf/actions/workflows/lint.yml)
46
40
 
47
41
  <!-- https://github.com/lgc2333/nonebot-registry-badge -->
48
-
49
42
  [![NoneBot Registry](https://img.shields.io/endpoint?url=https%3A%2F%2Fnbbdg.lgc2333.top%2Fplugin%2Fnonebot-plugin-werewolf)](https://registry.nonebot.dev/plugin/nonebot-plugin-werewolf:nonebot_plugin_werewolf)
50
43
  [![Supported Adapters](https://img.shields.io/endpoint?url=https%3A%2F%2Fnbbdg.lgc2333.top%2Fplugin-adapters%2Fnonebot-plugin-werewolf)](https://registry.nonebot.dev/plugin/nonebot-plugin-werewolf:nonebot_plugin_werewolf)
51
44
 
@@ -108,10 +101,11 @@ _✨ 简单的狼人杀插件 ✨_
108
101
 
109
102
  在 nonebot2 项目的 `.env` 文件中添加如下配置:
110
103
 
111
- | 配置项 | 必填 | 默认值 | 说明 |
112
- | :-----------------------: | :---: | :-----: | :------------------------: |
113
- | `werewolf__enable_poke` | 否 | `True` | 是否使用戳一戳简化操作流程 |
114
- | `werewolf__enable_button` | 否 | `False` | 是否在交互中添加按钮 |
104
+ | 配置项 | 必填 | 默认值 | 说明 |
105
+ | :-----------------------: | :---: | :-----: | :--------------------------: |
106
+ | `werewolf__enable_poke` | 否 | `True` | 是否使用戳一戳简化操作流程 |
107
+ | `werewolf__enable_button` | 否 | `False` | 是否在交互中添加按钮 |
108
+ | `werewolf__stop_command` | 否 | `stop` | 修改游戏进程中的 `stop` 命令 |
115
109
 
116
110
  `werewolf__enable_poke` 仅在 `OneBot V11` 适配器 / `Satori/chronocat` 下生效
117
111
 
@@ -150,11 +144,14 @@ _✨ 简单的狼人杀插件 ✨_
150
144
  | `退出游戏` | 群员 | 否 | 群聊 | _[准备阶段]_ 玩家退出游戏 |
151
145
  | `中止游戏` | 超级用户 | 是 | 群聊 | _[游戏内]_ 超级用户强制中止游戏 |
152
146
  | `狼人杀预设` | 超级用户 | 否 | 任意 | _[游戏外]_ 超级用户编辑游戏预设 |
147
+ | `狼人杀配置` | 超级用户 | 否 | 任意 | _[游戏外]_ 超级用户编辑游戏配置 |
153
148
 
154
149
  - 发起游戏时添加 `restart`/`重开`, 可加载上一次游戏的玩家列表, 快速发起游戏。例: `werewolf restart`/`狼人杀 重开`
155
150
 
156
151
  - `狼人杀预设` 命令用法可通过 `狼人杀预设 --help` 获取,或参考 [游戏内容](#游戏内容) 部分的介绍
157
152
 
153
+ - `狼人杀配置` 命令用法可通过 `狼人杀预设 --help` 获取
154
+
158
155
  - 对于 `OneBot V11` 适配器和 `Satori` 适配器的 `chronocat`, 启用配置项 `werewolf__enable_poke` 后, 可以使用戳一戳代替 _准备阶段_ 的 `加入游戏` 操作 和 游戏内的 `stop` 命令
159
156
 
160
157
  - _其他交互参考游戏内提示_
@@ -242,6 +239,16 @@ _✨ 简单的狼人杀插件 ✨_
242
239
 
243
240
  <!-- CHANGELOG -->
244
241
 
242
+ - 2025.02.13 v1.1.8
243
+
244
+ - 优化交互按钮
245
+ - 新增命令 `狼人杀配置` 用于调整游戏行为
246
+ - 新增配置项 `werewolf__stop_command`
247
+
248
+ - 2024.10.31 v1.1.7
249
+
250
+ - *Bug fix*
251
+
245
252
  - 2024.10.31 v1.1.6
246
253
 
247
254
  - 新增超级用户中止游戏 (#7)
@@ -0,0 +1,35 @@
1
+ nonebot_plugin_werewolf/__init__.py,sha256=LbJAHz_mAXZlSUmxAAF6dmfaiSfKnV5VRBZU0Ln2tDo,931
2
+ nonebot_plugin_werewolf/config.py,sha256=yFngZVp4yoc2v5uJ_Invwu2K6a90gjBiSDnMDLtltzQ,3120
3
+ nonebot_plugin_werewolf/constant.py,sha256=VU0fVdO_adbbRWaeynxoD1RQ_9GUuzUz-iuoIs8SQSE,1932
4
+ nonebot_plugin_werewolf/exception.py,sha256=SP9RdzsREB6PtpRfhZjxqybtvO0aw48hpN9QMU9jDZY,366
5
+ nonebot_plugin_werewolf/game.py,sha256=fak8DuWUKhPuuW3plT0Qv0D0yawAq8CTb6cBC8r1Fp0,19229
6
+ nonebot_plugin_werewolf/models.py,sha256=nE8QY2tag_Jrj6oXBVa6pM4BzxDEIquuuQo5yP-ev78,1865
7
+ nonebot_plugin_werewolf/player_set.py,sha256=zhri5GdE8YpQn7aK21dYifMwSFVQ2rGE-5o9EQ51THE,2604
8
+ nonebot_plugin_werewolf/utils.py,sha256=ZuXN1nyI7RtxrvSmnaNmNe62BoO9cXB0aaIPiM8YiL8,6766
9
+ nonebot_plugin_werewolf/matchers/__init__.py,sha256=lQ9AZDEWgtbP-W8KWvjkEYc_UfTHSUwjaGdZ7PT3z0E,219
10
+ nonebot_plugin_werewolf/matchers/depends.py,sha256=TITA2brcyHSavFA3K_HgqkoQtkwxdM8miyEKafcfZz4,1343
11
+ nonebot_plugin_werewolf/matchers/edit_behavior.py,sha256=9y5_JSlDgPadzRC7zRS050_L4jUvHy5dJb18_VXPVtI,6521
12
+ nonebot_plugin_werewolf/matchers/edit_preset.py,sha256=PXABbjhQM0DiKfEqjOMKtSrJs2fKoVh91iTJlVD3hKA,8089
13
+ nonebot_plugin_werewolf/matchers/message_in_game.py,sha256=Lm9VqZcnAU023SJ6R8LH-3-tSp8KRtmOJ4x4dTZGb1o,969
14
+ nonebot_plugin_werewolf/matchers/start_game.py,sha256=C8wCpvAETNP1K3lrW6KVc23PaeiXJ_zgkJ_mk7ejamA,11951
15
+ nonebot_plugin_werewolf/matchers/superuser_ops.py,sha256=oz-znCaraxCJS08Ox1xcbhC0X-Uy-WXeNYTH1LgT2zU,700
16
+ nonebot_plugin_werewolf/matchers/poke/__init__.py,sha256=gYysvGjztN3iDQpX6v5nkPT195FXnk7fqP9kzByTES0,220
17
+ nonebot_plugin_werewolf/matchers/poke/chronocat_poke.py,sha256=EjkJflxPLu9_rm-4vQqud9FVqDoQN68WcDJD_Ok2yH8,4082
18
+ nonebot_plugin_werewolf/matchers/poke/ob11_poke.py,sha256=8jmguMaVb80Rp4Z0KmVoQrTgLW_0UB75P2xlsAhSAgQ,2656
19
+ nonebot_plugin_werewolf/players/__init__.py,sha256=HvxLDkRS6mcT_IxCqEVdvFL8qh-EjBYNONpgCbM2RSw,382
20
+ nonebot_plugin_werewolf/players/can_shoot.py,sha256=XWjnf2_u29ciozu7ln9CH1eX9uoc9ZbxIL3WVPsgCYE,1887
21
+ nonebot_plugin_werewolf/players/civilian.py,sha256=QaDZFwgBp52VOnm5TqL0f_4JrtnS4ryHT5g2cisfjD8,155
22
+ nonebot_plugin_werewolf/players/guard.py,sha256=OKafOQ7VW0si45QJsWmdfYyK1QkTNLIVNj0bMy4v8AE,1223
23
+ nonebot_plugin_werewolf/players/hunter.py,sha256=E2CY7nP8UfbGh8Aj-LvuUX987YP513RM8hlZ4q-dy0g,193
24
+ nonebot_plugin_werewolf/players/idiot.py,sha256=mj76o5DdCX7gPkHkxAe6OB4l-LrbjvPgP-uGASMhArQ,1431
25
+ nonebot_plugin_werewolf/players/jester.py,sha256=XA_d9mCkVhdsbkrm4KEhb0hMyGFdlPEnpbTH_8Z0QGQ,828
26
+ nonebot_plugin_werewolf/players/player.py,sha256=zo1Q7RTFvFiH7eLj0060ebXn5l8OAMIUGzriuc8O_4c,8819
27
+ nonebot_plugin_werewolf/players/prophet.py,sha256=SbzsiaK-ty7bNwvysI5DLCNDwbZg5KyDTj37eOv7kYQ,945
28
+ nonebot_plugin_werewolf/players/werewolf.py,sha256=XSeXXgtzEXMo9iSAErWhLKlM02kmUHfL4-Q0iBwy6MM,4457
29
+ nonebot_plugin_werewolf/players/witch.py,sha256=gLFYN-IF1chlXs-BZiQ1g99A3o_qjg4YvftLlBx65Nw,2853
30
+ nonebot_plugin_werewolf/players/wolfking.py,sha256=93_VBZJSZfnsnLHENgZwhQOCAUwgClfTP1zJxm0taWk,438
31
+ nonebot_plugin_werewolf-1.1.8.dist-info/LICENSE,sha256=B_WbEqjGr6GYVNfEJPY31T1Opik7OtgOkhRs4Ig3e2M,1064
32
+ nonebot_plugin_werewolf-1.1.8.dist-info/METADATA,sha256=tzbbeG-N9sF_GiFq9WU77cuzBCJoBErHc2cEDxi1Ylo,11744
33
+ nonebot_plugin_werewolf-1.1.8.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
34
+ nonebot_plugin_werewolf-1.1.8.dist-info/top_level.txt,sha256=wLTfg8sTKbH9lLT9LtU118C9cTspEBJareLsrYM52YA,24
35
+ nonebot_plugin_werewolf-1.1.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,34 +0,0 @@
1
- nonebot_plugin_werewolf/__init__.py,sha256=ZomfjWnGRnFuh3I__spYbLRE1Z3wTUthwXzc5x8YPJw,931
2
- nonebot_plugin_werewolf/config.py,sha256=bMRRqNVWNsFDKyijxZZYPN7DCAf9bYf2MdfbPXE239w,1287
3
- nonebot_plugin_werewolf/constant.py,sha256=_ngw2xtXVZMTQXQ0gv4l9h4Lo1jq5v28fKLOGJ7G57o,1796
4
- nonebot_plugin_werewolf/exception.py,sha256=2F2kZsMaRIa7jOiIQJiM10K7Z59ouCpaZENcnEcEEXQ,398
5
- nonebot_plugin_werewolf/game.py,sha256=xU8IcrWQNRUjzfPIAbm1XCeshwfy8SWgxapUP1_NGOw,18925
6
- nonebot_plugin_werewolf/models.py,sha256=ljWy6BaTVyIK4Ng-wUVRteBLZe2pQLf8l3yWFZzWXHQ,1505
7
- nonebot_plugin_werewolf/player_set.py,sha256=84hZOOAaPjTyZZDje6mNy7zm4G5UH2nGDq1pvDNFT9w,2538
8
- nonebot_plugin_werewolf/utils.py,sha256=PBgadYdF3IQbaVPjcmstmsOGddfPvj8rcbiYQllHFYY,4096
9
- nonebot_plugin_werewolf/matchers/__init__.py,sha256=BnzEDmW8n1wkyI-un0DYXt2k_6CFv6NE8itZ2daw4zQ,174
10
- nonebot_plugin_werewolf/matchers/depends.py,sha256=poMQJ7Mzd3IZFvh2MvnfYdnnb2c-r6XFK_IOr50PL3o,1321
11
- nonebot_plugin_werewolf/matchers/edit_preset.py,sha256=gKd1csoR9u4VoeulTtxUUgxsOdgB0SDC1FMxMRdgw5I,8087
12
- nonebot_plugin_werewolf/matchers/message_in_game.py,sha256=lW0TMC85B-g9wZQcL7Q-LQSYyvO4-uem3Ye1szX2hU8,837
13
- nonebot_plugin_werewolf/matchers/start_game.py,sha256=YM4VGKpV8GQ29SgPh0jvWUHnx8onAvx_m4RWyeuRxmc,10187
14
- nonebot_plugin_werewolf/matchers/superuser_ops.py,sha256=Xjsmwzkt6Y-M_QlQwUL0EXN_fDqEqKSM4fcLk9fTvDY,685
15
- nonebot_plugin_werewolf/matchers/poke/__init__.py,sha256=gYysvGjztN3iDQpX6v5nkPT195FXnk7fqP9kzByTES0,220
16
- nonebot_plugin_werewolf/matchers/poke/chronocat_poke.py,sha256=SrFN8dQELFVDR5US9sOcE2gaOnH7AFiRVVK2RNa-Y5o,4023
17
- nonebot_plugin_werewolf/matchers/poke/ob11_poke.py,sha256=LROxtbauw4xbB8UKglsx6b6hkKWs_17HmgK4NTXW1HY,2640
18
- nonebot_plugin_werewolf/players/__init__.py,sha256=djAI5XxR2I-XvnH-lVqX_YCHB_AiT-6jdmwFE1ffN_0,379
19
- nonebot_plugin_werewolf/players/can_shoot.py,sha256=Z0AR_jCfcU1ps5629sWB_mH8O_iVLy8-DyePgBfznNA,1814
20
- nonebot_plugin_werewolf/players/civilian.py,sha256=9m-bgzqHji-9Aejl2TnchSIRw_SZpKLqCGdaEWXhopc,155
21
- nonebot_plugin_werewolf/players/guard.py,sha256=gHPlIfBXtQ8MSoWvucIIq0XrJQx9KIIKIVl-jwAHhgc,1132
22
- nonebot_plugin_werewolf/players/hunter.py,sha256=q17IjSXt5knDAc49NbV0NCwNW7qASqODUNgC0L1zqeI,193
23
- nonebot_plugin_werewolf/players/idiot.py,sha256=jz13BN4BsYcmiZdTwSlXUm4yc0KR8GUmQmq2GI7_Kzo,1431
24
- nonebot_plugin_werewolf/players/joker.py,sha256=n_jlddGMpFJ0O0sc_1J6IybfPsPJSWeS4GC0S6IZoTk,826
25
- nonebot_plugin_werewolf/players/player.py,sha256=hEbGRF5vrgKYKKEC5DB3JUIG6SEyvoHTYGZUqHPjf8Q,6953
26
- nonebot_plugin_werewolf/players/prophet.py,sha256=wrTR8BnktiZ8aEI4VzYa5kt4GXyFnyi5wZmCO933-rE,917
27
- nonebot_plugin_werewolf/players/werewolf.py,sha256=jZMzYE0LiwsxO8XHMlWRk25XO5gGe24t87NqzLc3I4A,3287
28
- nonebot_plugin_werewolf/players/witch.py,sha256=FOM_MMKUjO6QpOQK9JvHq9zwa4GTVCVnW7UtPgT_BTw,2360
29
- nonebot_plugin_werewolf/players/wolfking.py,sha256=Y_G1eDdFYGTip5Pl9Sz0OvPsP0aiiFH8NkfGiFu7r1E,438
30
- nonebot_plugin_werewolf-1.1.6.dist-info/LICENSE,sha256=B_WbEqjGr6GYVNfEJPY31T1Opik7OtgOkhRs4Ig3e2M,1064
31
- nonebot_plugin_werewolf-1.1.6.dist-info/METADATA,sha256=pBGQnG8aePnlLEcZBlF_BqrIe4Y4O8oMK5mFwPGLWwg,11954
32
- nonebot_plugin_werewolf-1.1.6.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
33
- nonebot_plugin_werewolf-1.1.6.dist-info/top_level.txt,sha256=wLTfg8sTKbH9lLT9LtU118C9cTspEBJareLsrYM52YA,24
34
- nonebot_plugin_werewolf-1.1.6.dist-info/RECORD,,