more refactoring
This commit is contained in:
parent
b85c20b65a
commit
13064a3af0
Binary file not shown.
Binary file not shown.
|
@ -13,22 +13,25 @@ class Developer(commands.Cog):
|
||||||
await self.bot.change_presence(status=discord.Status.online, activity=discord.Game('One Night Ultimate Werewolf'))
|
await self.bot.change_presence(status=discord.Status.online, activity=discord.Game('One Night Ultimate Werewolf'))
|
||||||
print('We have logged in as {0.user}'.format(self.bot))
|
print('We have logged in as {0.user}'.format(self.bot))
|
||||||
|
|
||||||
@commands.command()
|
|
||||||
async def hello(self, ctx):
|
|
||||||
await ctx.send(f"Hello {ctx.message.author.name} :wave:")
|
|
||||||
|
|
||||||
@commands.command()
|
|
||||||
async def ping(self, ctx):
|
|
||||||
print("pong", self.bot.owner_id, await self.bot.application_info())
|
|
||||||
print(await self.bot.is_owner(ctx.author))
|
|
||||||
await ctx.send("pong")
|
|
||||||
|
|
||||||
async def is_dev(ctx):
|
async def is_dev(ctx):
|
||||||
if ctx.author.id == 461892912821698562:
|
if ctx.author.id == 461892912821698562:
|
||||||
return True
|
return True
|
||||||
await ctx.send("This command is not for you!")
|
await ctx.send("This command is not for you!")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
async def hello(self, ctx):
|
||||||
|
await ctx.send(f"Hello {ctx.message.author.name} :wave:")
|
||||||
|
|
||||||
|
@commands.group(name="gg")
|
||||||
|
async def group(self, ctx):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@group.command()
|
||||||
|
@commands.check(is_dev)
|
||||||
|
async def ping(self, ctx):
|
||||||
|
await ctx.send("pong")
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.check(is_dev)
|
@commands.check(is_dev)
|
||||||
async def logout(self, ctx):
|
async def logout(self, ctx):
|
||||||
|
|
Binary file not shown.
|
@ -1,25 +1,23 @@
|
||||||
"""This (abstract) module is a template for Discord Cog's for game specific channel commands"""
|
"""Has a single class: Game_cog"""
|
||||||
|
|
||||||
# standard library imports
|
# standard library imports
|
||||||
from typing import Dict
|
from typing import Dict, Type
|
||||||
|
|
||||||
# discord imports
|
# discord imports
|
||||||
import discord
|
import discord
|
||||||
from discord.ext import commands
|
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from ..send_message import Send_message
|
from ..send_message import Send_message
|
||||||
from .game import Game
|
from .game import Game
|
||||||
|
|
||||||
|
|
||||||
# TODO: take group as argument to add subcommands
|
class Game_cog(Send_message):
|
||||||
|
|
||||||
class Game_cog(Send_message, commands.Cog):
|
|
||||||
"""This (abstract) class is are common function for the Game Cog's (setup-game, pre-game, in-game), mainly has checker functions"""
|
"""This (abstract) class is are common function for the Game Cog's (setup-game, pre-game, in-game), mainly has checker functions"""
|
||||||
|
|
||||||
def __init__(self, bot, game_instances: Dict[discord.TextChannel, Game]):
|
def __init__(self, bot, game_cls: Type[Game]):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.game_instances = game_instances
|
self.game_cls = game_cls
|
||||||
|
self.game_instances = Dict[discord.TextChannel, self.game_cls]
|
||||||
|
|
||||||
async def setup_check(self, ctx):
|
async def setup_check(self, ctx):
|
||||||
if ctx.channel not in self.game_instances:
|
if ctx.channel not in self.game_instances:
|
||||||
|
@ -36,17 +34,13 @@ class Game_cog(Send_message, commands.Cog):
|
||||||
await self.send_wrong(ctx, "No game is running")
|
await self.send_wrong(ctx, "No game is running")
|
||||||
return self.game_instances[ctx.channel].running
|
return self.game_instances[ctx.channel].running
|
||||||
|
|
||||||
|
async def setup(self, ctx):
|
||||||
class Setup_game_cog(Game_cog):
|
|
||||||
"""This (abstract) class is a template for Discord Cog's for game specific channel commands for setting up the channel"""
|
|
||||||
|
|
||||||
async def setup(self, ctx, game: Game):
|
|
||||||
"""This function creates an game instance for this channel"""
|
"""This function creates an game instance for this channel"""
|
||||||
if ctx.channel in self.game_instances:
|
if ctx.channel in self.game_instances:
|
||||||
await self.send_wrong(ctx, f"A game '{game.name}' is already setup in this channel")
|
await self.send_wrong(ctx, f"A game '{self.game_cls.name}' is already setup in this channel")
|
||||||
else:
|
else:
|
||||||
self.game_instances[ctx.channel] = game(self.bot, ctx.channel)
|
self.game_instances[ctx.channel] = self.game_cls(self.bot, ctx.channel)
|
||||||
await self.send_friendly(ctx, f"This channel can now play: {game.name}")
|
await self.send_friendly(ctx, f"This channel can now play: {self.game_cls.name}")
|
||||||
|
|
||||||
async def reset(self, ctx):
|
async def reset(self, ctx):
|
||||||
"""This function deletes the game instance for this channel"""
|
"""This function deletes the game instance for this channel"""
|
||||||
|
@ -54,10 +48,10 @@ class Setup_game_cog(Game_cog):
|
||||||
del self.game_instances[ctx.channel]
|
del self.game_instances[ctx.channel]
|
||||||
|
|
||||||
# TODO: better info message
|
# TODO: better info message
|
||||||
async def info(self, ctx, game: Game):
|
async def info(self, ctx):
|
||||||
"""Send information about the subcommands for the game"""
|
"""Send information about the subcommands for the game"""
|
||||||
embed = discord.Embed(title="How to play?", description="You will need to set up the game and its information in a channel and start the game there. Afterwards the player mainly interact with the bot in DM.", color=0x00ffff)
|
embed = discord.Embed(title="How to play?", description="You will need to set up the game and its information in a channel and start the game there. Afterwards the player mainly interact with the bot in DM.", color=0x00ffff)
|
||||||
embed.set_author(name=f"With this bot you can play {game.name}")
|
embed.set_author(name=f"With this bot you can play {self.game_cls.name}")
|
||||||
# embed.set_thumbnail(url="https://images-na.ssl-images-amazon.com/images/I/717GrDtFKCL._AC_SL1000_.jpg")
|
# embed.set_thumbnail(url="https://images-na.ssl-images-amazon.com/images/I/717GrDtFKCL._AC_SL1000_.jpg")
|
||||||
embed.add_field(name="$w game setup", value="Make this channel playable.", inline=False)
|
embed.add_field(name="$w game setup", value="Make this channel playable.", inline=False)
|
||||||
embed.add_field(name="$w game players", value="Set mentioned users as players", inline=False)
|
embed.add_field(name="$w game players", value="Set mentioned users as players", inline=False)
|
||||||
|
@ -66,10 +60,7 @@ class Setup_game_cog(Game_cog):
|
||||||
embed.set_footer(text="Have fun!")
|
embed.set_footer(text="Have fun!")
|
||||||
await ctx.send(embed=embed)
|
await ctx.send(embed=embed)
|
||||||
|
|
||||||
|
async def pre_game_check(self, ctx):
|
||||||
class Pre_game_cog(Game_cog):
|
|
||||||
"""This (abstract) class is a template for Discord Cog's for game specific channel commands for setting up the game rounds"""
|
|
||||||
async def cog_check(self, ctx):
|
|
||||||
return self.setup_check(ctx) and self.not_running_check(ctx)
|
return self.setup_check(ctx) and self.not_running_check(ctx)
|
||||||
|
|
||||||
async def players(self, ctx):
|
async def players(self, ctx):
|
||||||
|
@ -79,10 +70,7 @@ class Pre_game_cog(Game_cog):
|
||||||
self.game_instances[ctx.channel].game = self.bot.loop.create_task(self.game_instances[ctx.channel].round())
|
self.game_instances[ctx.channel].game = self.bot.loop.create_task(self.game_instances[ctx.channel].round())
|
||||||
await self.game_instances[ctx.channel].game
|
await self.game_instances[ctx.channel].game
|
||||||
|
|
||||||
|
async def in_game_check(self, ctx):
|
||||||
class In_game_goc(Game_cog):
|
|
||||||
"""This (abstract) class is a template for Discord Cog's for game specific channel commands during the game"""
|
|
||||||
async def cog_check(self, ctx):
|
|
||||||
return self.setup_check(ctx) and self.running_check(ctx)
|
return self.setup_check(ctx) and self.running_check(ctx)
|
||||||
|
|
||||||
async def stop(self, ctx):
|
async def stop(self, ctx):
|
||||||
|
|
Binary file not shown.
|
@ -1,3 +1,5 @@
|
||||||
|
"""Has a single class: Werewolf_Cog"""
|
||||||
|
|
||||||
# discord imports
|
# discord imports
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
|
@ -6,12 +8,12 @@ from ..game_cog import Game_cog
|
||||||
from .game import Werewolf_game
|
from .game import Werewolf_game
|
||||||
|
|
||||||
|
|
||||||
class Werewolf_cog(Game_cog):
|
class Werewolf_cog(Game_cog, commands.Cog):
|
||||||
"""This singleton class is a Discord Cog for the interaction in the werewolf game"""
|
"""This singleton class is a Discord Cog for the interaction in the werewolf game"""
|
||||||
|
|
||||||
@commands.group(invoke_without_command=True)
|
@commands.group(invoke_without_command=True)
|
||||||
async def werewolf(self, ctx):
|
async def werewolf(self, ctx):
|
||||||
# TODO: isn't there a better way to have a default subcommand?
|
# TODO: isn't there a better way to have a default subcommand? Maybe invoke super().info()?
|
||||||
await ctx.invoke(self.bot.get_command('werewolf info'))
|
await ctx.invoke(self.bot.get_command('werewolf info'))
|
||||||
|
|
||||||
@werewolf.command()
|
@werewolf.command()
|
||||||
|
@ -29,6 +31,24 @@ class Werewolf_cog(Game_cog):
|
||||||
"""This function deletes the game instance for this channel"""
|
"""This function deletes the game instance for this channel"""
|
||||||
await super().reset(ctx)
|
await super().reset(ctx)
|
||||||
|
|
||||||
|
@werewolf.command()
|
||||||
|
@commands.check(Game_cog.pre_game_check)
|
||||||
|
async def players(self, ctx):
|
||||||
|
"""registers all mentioned players for the game"""
|
||||||
|
await super().players(ctx)
|
||||||
|
|
||||||
|
@werewolf.command()
|
||||||
|
@commands.check(Game_cog.pre_game_check)
|
||||||
|
async def start(self, ctx):
|
||||||
|
"""starts a round of werewolf"""
|
||||||
|
await super().start(ctx)
|
||||||
|
|
||||||
|
@werewolf.command()
|
||||||
|
@commands.check(Game_cog.in_game_check)
|
||||||
|
async def stop(self, ctx):
|
||||||
|
"""aborts the current round of werewolf"""
|
||||||
|
await super().stop(ctx)
|
||||||
|
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
bot.add_cog(Werewolf_cog(bot, None))
|
bot.add_cog(Werewolf_cog(bot, Werewolf_game))
|
||||||
|
|
|
@ -31,7 +31,7 @@ bot.load_extension('package.games.werewolf.cog')
|
||||||
@bot.command()
|
@bot.command()
|
||||||
@commands.is_owner()
|
@commands.is_owner()
|
||||||
async def reload(ctx, extension):
|
async def reload(ctx, extension):
|
||||||
bot.reload_extension(f'{extension}')
|
bot.reload_extension(f'package.{extension}')
|
||||||
|
|
||||||
|
|
||||||
# checker annotations
|
# checker annotations
|
||||||
|
|
Loading…
Reference in New Issue