added decorator, decorator with args, time command added
This commit is contained in:
parent
e56a5d1629
commit
b474d41087
|
@ -72,30 +72,41 @@ async def setup(ctx):
|
||||||
|
|
||||||
def channel_setup(command):
|
def channel_setup(command):
|
||||||
@functools.wraps(command)
|
@functools.wraps(command)
|
||||||
async def wrapper(ctx):
|
async def wrapper(ctx, *args, **kwargs):
|
||||||
if ctx.channel not in game_instances:
|
if ctx.channel not in game_instances:
|
||||||
await send_wrong(ctx, f"No game setup yet. Use {PREFIX}game setup")
|
await send_wrong(ctx, f"No game setup yet. Use {PREFIX}game setup")
|
||||||
else:
|
else:
|
||||||
await command(ctx)
|
await command(ctx, *args, **kwargs)
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
def game_not_running(command):
|
||||||
|
@functools.wraps(command)
|
||||||
|
@channel_setup
|
||||||
|
async def wrapper(ctx, *args, **kwargs):
|
||||||
|
if game_instances[ctx.channel].running:
|
||||||
|
await send_wrong(ctx, "Sorry! A game is already running")
|
||||||
|
else:
|
||||||
|
await command(ctx, *args, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
def game_running(command):
|
def game_running(command):
|
||||||
@functools.wraps(command)
|
@functools.wraps(command)
|
||||||
@channel_setup
|
@channel_setup
|
||||||
async def wrapper(ctx):
|
async def wrapper(ctx, *args, **kwargs):
|
||||||
if game_instances[ctx.channel].running:
|
if not game_instances[ctx.channel].running:
|
||||||
await send_wrong(ctx, "Sorry! A game is already running")
|
await send_wrong(ctx, "No game is running")
|
||||||
else:
|
else:
|
||||||
await command(ctx)
|
await command(ctx, *args, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
def error_handling(command):
|
def error_handling(command):
|
||||||
@functools.wraps(command)
|
@functools.wraps(command)
|
||||||
async def wrapper(ctx):
|
async def wrapper(ctx, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
await command(ctx)
|
await command(ctx, *args, **kwargs)
|
||||||
except ValueError as error:
|
except ValueError as error:
|
||||||
await send_wrong(ctx, str(error))
|
await send_wrong(ctx, str(error))
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
|
@ -104,7 +115,7 @@ def error_handling(command):
|
||||||
|
|
||||||
|
|
||||||
@game.command()
|
@game.command()
|
||||||
@game_running
|
@game_not_running
|
||||||
@error_handling
|
@error_handling
|
||||||
async def start(ctx):
|
async def start(ctx):
|
||||||
game_instances[ctx.channel].game = bot.loop.create_task(game_instances[ctx.channel].round())
|
game_instances[ctx.channel].game = bot.loop.create_task(game_instances[ctx.channel].round())
|
||||||
|
@ -112,27 +123,39 @@ async def start(ctx):
|
||||||
|
|
||||||
|
|
||||||
@game.command()
|
@game.command()
|
||||||
|
@game_running
|
||||||
@channel_setup
|
@channel_setup
|
||||||
async def stop(ctx):
|
async def stop(ctx):
|
||||||
if not game_instances[ctx.channel].running:
|
game_instances[ctx.channel].game.cancel()
|
||||||
await send_wrong(ctx, "No game is running")
|
await send_friendly(ctx, "Game canceled")
|
||||||
else:
|
|
||||||
game_instances[ctx.channel].game.cancel()
|
|
||||||
await send_friendly(ctx, "Game canceled")
|
|
||||||
|
|
||||||
|
|
||||||
@game.command()
|
@game.command()
|
||||||
@game_running
|
@game_not_running
|
||||||
@error_handling
|
@error_handling
|
||||||
async def players(ctx):
|
async def players(ctx):
|
||||||
await game_instances[ctx.channel].set_players(ctx.message)
|
await game_instances[ctx.channel].set_players(ctx.message)
|
||||||
|
|
||||||
|
|
||||||
|
@game.command()
|
||||||
|
@game_not_running
|
||||||
|
@error_handling
|
||||||
|
async def roles(ctx, *args):
|
||||||
|
await game_instances[ctx.channel].set_roles(args)
|
||||||
|
|
||||||
|
|
||||||
|
@game.command()
|
||||||
|
@game_not_running
|
||||||
|
@error_handling
|
||||||
|
async def minutes(ctx, i):
|
||||||
|
await game_instances[ctx.channel].set_time(i)
|
||||||
|
|
||||||
|
|
||||||
@game.command()
|
@game.command()
|
||||||
@game_running
|
@game_running
|
||||||
@error_handling
|
@error_handling
|
||||||
async def roles(ctx):
|
async def time(ctx):
|
||||||
await game_instances[ctx.channel].set_roles(ctx.message.content.split()[3:]) # exclude commands
|
await send_friendly(ctx, game_instances[ctx.channel].remaining_time_string())
|
||||||
|
|
||||||
|
|
||||||
# smaller commands
|
# smaller commands
|
||||||
|
@ -153,10 +176,10 @@ async def ping(ctx):
|
||||||
|
|
||||||
def developer(command):
|
def developer(command):
|
||||||
@functools.wraps(command)
|
@functools.wraps(command)
|
||||||
async def wrapper(ctx):
|
async def wrapper(ctx, *args, **kwargs):
|
||||||
DEV_ID = 461892912821698562
|
DEV_ID = 461892912821698562
|
||||||
if ctx.author.id == DEV_ID:
|
if ctx.author.id == DEV_ID:
|
||||||
await command(ctx)
|
await command(ctx, *args, **kwargs)
|
||||||
else:
|
else:
|
||||||
await send_wrong(ctx, "This command is not for you!")
|
await send_wrong(ctx, "This command is not for you!")
|
||||||
return wrapper
|
return wrapper
|
||||||
|
@ -170,8 +193,9 @@ async def logout(ctx):
|
||||||
|
|
||||||
@bot.command()
|
@bot.command()
|
||||||
@developer
|
@developer
|
||||||
async def debug(ctx):
|
async def debug(ctx, *args):
|
||||||
print("DEBUG")
|
print("DEBUG")
|
||||||
print(ctx.message.content)
|
print(ctx.args)
|
||||||
|
print(ctx.kwargs)
|
||||||
|
|
||||||
bot.run(TOKEN)
|
bot.run(TOKEN)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from random import shuffle
|
from random import shuffle
|
||||||
|
import time
|
||||||
import asyncio
|
import asyncio
|
||||||
import discord
|
import discord
|
||||||
from werewolf_roles import Role, Doppelganger, Werewolf, Minion, Mason, Seer, Robber, Troublemaker, Drunk, Insomniac, Tanner, Hunter, No_role
|
from werewolf_roles import Role, Doppelganger, Werewolf, Minion, Mason, Seer, Robber, Troublemaker, Drunk, Insomniac, Tanner, Hunter, No_role
|
||||||
|
@ -29,6 +30,10 @@ class Game:
|
||||||
self.role_list = [Role.match(r) for r in suggestions] # raises ValueError
|
self.role_list = [Role.match(r) for r in suggestions] # raises ValueError
|
||||||
await self.send(f"Roles: {', '.join(r.name() for r in self.role_list)}") # send confirmation
|
await self.send(f"Roles: {', '.join(r.name() for r in self.role_list)}") # send confirmation
|
||||||
|
|
||||||
|
async def set_time(self, msg):
|
||||||
|
self.discussion_time = int(msg) * 60 + 1
|
||||||
|
await self.send(f"You have set the discussion time to {self.discussion_time//60} minutes") # send confirmation
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
if not 0 <= len(self.player_list) <= 10:
|
if not 0 <= len(self.player_list) <= 10:
|
||||||
raise ValueError(f"Invalid number of players: {len(self.player_list)}")
|
raise ValueError(f"Invalid number of players: {len(self.player_list)}")
|
||||||
|
@ -48,7 +53,6 @@ class Game:
|
||||||
self.voting_list = self.player_list + [No_player()]
|
self.voting_list = self.player_list + [No_player()]
|
||||||
for c in self.voting_list:
|
for c in self.voting_list:
|
||||||
c.reset()
|
c.reset()
|
||||||
self.time = 0
|
|
||||||
|
|
||||||
def distribute_roles(self):
|
def distribute_roles(self):
|
||||||
shuffle(self.role_list)
|
shuffle(self.role_list)
|
||||||
|
@ -80,14 +84,19 @@ class Game:
|
||||||
async def start_day(self):
|
async def start_day(self):
|
||||||
await self.send("The day has started")
|
await self.send("The day has started")
|
||||||
|
|
||||||
|
def remaining_time_string(self):
|
||||||
|
t = int(self.start_time + self.discussion_time - time.time())
|
||||||
|
return f"{t//60} minute(s) and {t%60} second(s)"
|
||||||
|
|
||||||
async def discussion_timer(self):
|
async def discussion_timer(self):
|
||||||
await self.send(f"You have {self.discussion_time / 60} minutes to discuss")
|
self.start_time = time.time()
|
||||||
|
await self.send(f"You have {self.remaining_time_string()} to discuss")
|
||||||
await asyncio.sleep(self.discussion_time / 2)
|
await asyncio.sleep(self.discussion_time / 2)
|
||||||
await self.send("Half of the time has passed")
|
await self.send(f"{self.remaining_time_string()} remaining")
|
||||||
await asyncio.sleep(self.discussion_time / 2 - 60)
|
await asyncio.sleep(self.discussion_time / 2 - 60)
|
||||||
await self.send("One minute remaining")
|
await self.send(f"{self.remaining_time_string()} remaining")
|
||||||
await asyncio.sleep(30)
|
await asyncio.sleep(30)
|
||||||
await self.send("30 seconds remaining")
|
await self.send(f"{self.remaining_time_string()} remaining")
|
||||||
await asyncio.sleep(30)
|
await asyncio.sleep(30)
|
||||||
|
|
||||||
async def early_vote(self):
|
async def early_vote(self):
|
||||||
|
|
Loading…
Reference in New Issue