Setup channels
This commit is contained in:
parent
90f0c6e840
commit
27e7b70295
149
orochi/bot.py
149
orochi/bot.py
|
@ -1,6 +1,6 @@
|
|||
from pathlib import Path
|
||||
|
||||
import disnake
|
||||
from disnake import CategoryChannel, PermissionOverwrite, TextChannel
|
||||
from disnake.errors import InvalidData
|
||||
from disnake.ext import commands
|
||||
import logging
|
||||
|
||||
|
@ -10,8 +10,146 @@ bot = commands.Bot(command_prefix='!')
|
|||
|
||||
|
||||
@bot.event
|
||||
async def on_message(message: disnake.Message):
|
||||
await bot.process_commands(message)
|
||||
async def on_ready():
|
||||
config: Config = bot.config
|
||||
logger = bot.logger
|
||||
|
||||
if config.guild is None:
|
||||
config.save()
|
||||
logger.error("The guild ID is missing")
|
||||
exit(1)
|
||||
|
||||
guild = await bot.fetch_guild(config.guild)
|
||||
|
||||
if not guild:
|
||||
logger.error("Unknown guild.")
|
||||
exit(1)
|
||||
|
||||
if config.vote_category is None:
|
||||
category = await guild.create_category("Votes")
|
||||
config.vote_category = category.id
|
||||
config.save()
|
||||
|
||||
if config.secret_category is None:
|
||||
category = await guild.create_category("Conversation⋅s secrète⋅s")
|
||||
config.secret_category = category.id
|
||||
config.save()
|
||||
|
||||
vote_category: CategoryChannel = await guild.fetch_channel(config.vote_category)
|
||||
if vote_category is None:
|
||||
config.vote_category = None
|
||||
return await on_ready()
|
||||
|
||||
secret_category: CategoryChannel = await guild.fetch_channel(config.secret_category)
|
||||
if secret_category is None:
|
||||
config.secret_category = None
|
||||
return await on_ready()
|
||||
|
||||
await vote_category.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
|
||||
await secret_category.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
|
||||
for i, player in enumerate(Config.PLAYERS):
|
||||
player_id = player.lower()
|
||||
if player_id not in config.vote_channels:
|
||||
channel: TextChannel = await vote_category.create_text_channel(player_id)
|
||||
config.vote_channels[player_id] = channel.id
|
||||
config.save()
|
||||
|
||||
channel: TextChannel = await guild.fetch_channel(config.vote_channels[player_id])
|
||||
if channel is None:
|
||||
del config.vote_channels[player_id]
|
||||
return await on_ready()
|
||||
|
||||
await channel.edit(name=player_id, category=vote_category, position=i)
|
||||
await channel.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
|
||||
if player_id not in config.player_roles:
|
||||
role = await guild.create_role(name=player)
|
||||
config.player_roles[player_id] = role.id
|
||||
config.save()
|
||||
|
||||
guild = await bot.fetch_guild(guild.id) # update roles
|
||||
role = guild.get_role(config.player_roles[player_id])
|
||||
if role is None:
|
||||
del config.player_roles[player_id]
|
||||
config.save()
|
||||
return await on_ready()
|
||||
|
||||
await channel.set_permissions(
|
||||
role, overwrite=PermissionOverwrite(read_message_history=True, read_messages=True)
|
||||
)
|
||||
|
||||
if not config.telepathy_channel:
|
||||
channel: TextChannel = await secret_category.create_text_channel("bigbrain")
|
||||
config.telepathy_channel = channel.id
|
||||
config.save()
|
||||
|
||||
telepathy_channel: TextChannel = await guild.fetch_channel(config.telepathy_channel)
|
||||
if not telepathy_channel:
|
||||
config.telepathy_channel = None
|
||||
return await on_ready()
|
||||
|
||||
await telepathy_channel.edit(name="bigbrain", category=secret_category, position=0,
|
||||
topic="Échanges télépathiques")
|
||||
await telepathy_channel.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
delphine = guild.get_role(config.player_roles['delphine'])
|
||||
philia = guild.get_role(config.player_roles['philia'])
|
||||
await telepathy_channel.set_permissions(
|
||||
delphine, overwrite=PermissionOverwrite(read_message_history=True, read_messages=True)
|
||||
)
|
||||
await telepathy_channel.set_permissions(
|
||||
philia, overwrite=PermissionOverwrite(read_message_history=True, read_messages=True)
|
||||
)
|
||||
|
||||
if not config.left_channel:
|
||||
channel: TextChannel = await secret_category.create_text_channel("left")
|
||||
config.left_channel = channel.id
|
||||
config.save()
|
||||
|
||||
left_channel: TextChannel = await guild.fetch_channel(config.left_channel)
|
||||
if not left_channel:
|
||||
config.left_channel = None
|
||||
return await on_ready()
|
||||
|
||||
await left_channel.edit(name="left", category=secret_category, position=1,
|
||||
topic="Des voix dans la tête ...")
|
||||
await left_channel.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
await left_channel.set_permissions(
|
||||
philia, overwrite=PermissionOverwrite(read_message_history=True, read_messages=True)
|
||||
)
|
||||
|
||||
if not config.backdoor_channel:
|
||||
channel: TextChannel = await secret_category.create_text_channel("backdoor")
|
||||
config.backdoor_channel = channel.id
|
||||
config.save()
|
||||
|
||||
backdoor_channel: TextChannel = await guild.fetch_channel(config.backdoor_channel)
|
||||
if not backdoor_channel:
|
||||
config.backdoor_channel = None
|
||||
return await on_ready()
|
||||
|
||||
await backdoor_channel.edit(name="backdoor", category=secret_category, position=2,
|
||||
topic="Panel d'administrati0n du jeu")
|
||||
await backdoor_channel.set_permissions(
|
||||
guild.default_role, overwrite=PermissionOverwrite(read_message_history=False, read_messages=False)
|
||||
)
|
||||
dan = guild.get_role(config.player_roles['dan'])
|
||||
await backdoor_channel.set_permissions(
|
||||
dan, overwrite=PermissionOverwrite(read_message_history=True, read_messages=True)
|
||||
)
|
||||
|
||||
config.save()
|
||||
|
||||
|
||||
@bot.command()
|
||||
|
@ -37,8 +175,7 @@ class Confirm(disnake.ui.View):
|
|||
|
||||
|
||||
def run():
|
||||
config_file = Path(__file__).parent.parent / 'config.yml'
|
||||
config = Config.load(config_file)
|
||||
config = Config.load()
|
||||
|
||||
logger = logging.getLogger('discord')
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
|
|
@ -1,13 +1,44 @@
|
|||
from dataclasses import dataclass
|
||||
from dataclasses import asdict, dataclass, field
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
@dataclass
|
||||
class Config:
|
||||
discord_token: str
|
||||
PLAYERS = [
|
||||
"Kamui",
|
||||
"Oji",
|
||||
"Dan",
|
||||
"Tora",
|
||||
"Delphine",
|
||||
"Philia",
|
||||
"Hanabi",
|
||||
"Nona",
|
||||
"Ennea",
|
||||
]
|
||||
|
||||
discord_token: str = ""
|
||||
guild: int = None
|
||||
vote_category: int = None
|
||||
secret_category: int = None
|
||||
vote_channels: dict[str, int] = field(default_factory=dict)
|
||||
backdoor_channel: int = None
|
||||
telepathy_channel: int = None
|
||||
left_channel: int = None
|
||||
player_roles: dict[str, int] = field(default_factory=dict)
|
||||
|
||||
@classmethod
|
||||
def load(cls, filename) -> "Config":
|
||||
def load(cls, filename=None) -> "Config":
|
||||
if filename is None:
|
||||
filename = Path(__file__).parent.parent / 'config.yml'
|
||||
|
||||
with open(filename) as config_file:
|
||||
return Config(**yaml.safe_load(config_file))
|
||||
return Config(**(yaml.safe_load(config_file) or {}))
|
||||
|
||||
def save(self, filename=None) -> None:
|
||||
if filename is None:
|
||||
filename = Path(__file__).parent.parent / 'config.yml'
|
||||
|
||||
with open(filename, 'w') as config_file:
|
||||
yaml.safe_dump(asdict(self), config_file)
|
||||
|
|
Loading…
Reference in New Issue