forked from viveksantayana/geas-bot
87 lines
3.7 KiB
Python
87 lines
3.7 KiB
Python
import os # OS Locations
|
|
import yaml # YAML parser for Bot config files
|
|
import asyncio # Discord Py Dependency
|
|
import discord # Main Lib
|
|
from datetime import datetime
|
|
import time
|
|
from discord.ext import commands # Commands module
|
|
from discord_slash import SlashCommand, SlashContext, cog_ext, utils # Slash Command Library
|
|
from discord_slash.utils.manage_commands import create_choice, create_option, create_permission # Slash Command features
|
|
from discord_slash.model import SlashCommandPermissionType
|
|
|
|
from bot import configFile, yaml_load, yaml_dump, lookupFile, dataFile, gmFile, categoriesFile
|
|
|
|
#### T Card Command
|
|
|
|
class TCardCommand(commands.Cog, name='T-Card Command'):
|
|
def __init__(self, client):
|
|
self.client = client
|
|
|
|
conf = yaml_load(configFile)
|
|
lookup = yaml_load(lookupFile)
|
|
data = yaml_load(dataFile)
|
|
gms = yaml_load(gmFile)
|
|
categories = yaml_load(categoriesFile)
|
|
guild_ids= [ int(x) for x in list(lookup)]
|
|
|
|
@cog_ext.cog_slash(
|
|
name='tcard',
|
|
description='Invokes a T-Card in the current game.',
|
|
default_permission=True,
|
|
guild_ids=guild_ids,
|
|
)
|
|
async def _tcard(self, ctx:SlashContext):
|
|
conf = yaml_load(configFile)
|
|
lookup = yaml_load(lookupFile)
|
|
data = yaml_load(dataFile)
|
|
gms = yaml_load(gmFile)
|
|
categories = yaml_load(categoriesFile)
|
|
guildStr = str(ctx.guild.id)
|
|
# rStr = str(game.id)
|
|
embed = discord.Embed(
|
|
title='T-Card',
|
|
description='A T-Card Has Been Played',
|
|
colour=discord.Color.dark_red(),
|
|
)
|
|
embed.set_footer(text=datetime.now().strftime('%a %-d %b %y, %-I:%M %p'))
|
|
embed.set_image(url='http://geas.org.uk/wp-content/uploads/2020/08/tcard-1-e1597167776966.png')
|
|
|
|
"""If this was called in a game channel"""
|
|
if str(ctx.channel.category.id) in categories[guildStr]:
|
|
|
|
"""Send a T-Card graphic to the channel, tagging the role."""
|
|
role = ctx.guild.get_role(categories[guildStr][str(ctx.channel.category.id)])
|
|
await ctx.channel.send(f'{role.mention}', embed=embed)
|
|
|
|
if ctx.author_id == lookup[guildStr][str(role.id)]["gm"]:
|
|
|
|
"""Behaviour for when the GM issues T-Card command."""
|
|
await ctx.send(content=f'```You have invoked the T-Card in the game {lookup[guildStr][str(role.id)]["game_title"]} as the GM.```', hidden=True)
|
|
else:
|
|
"""Default behaviour for when someone who is not the GM issues the command."""
|
|
|
|
"""Privately message the GM."""
|
|
gm = await ctx.guild.fetch_member(lookup[guildStr][str(role.id)]["gm"])
|
|
await gm.send(f'**Important**\n```Player {ctx.author.display_name} has invoked a T-Card in your game {lookup[guildStr][str(role.id)]["game_title"]}. Please check in with them and make sure everything is okay. If you need any further help, please feel free to contact a member of the Committee.```')
|
|
|
|
"""Notify the issuer of the command privately via hidden reply."""
|
|
await ctx.send(content=f'```You have invoked the T-Card in the game {lookup[guildStr][str(role.id)]["game_title"]}. The GM has been notified privately.```', hidden=True)
|
|
|
|
"""Do the audio thing."""
|
|
opus = discord.opus.load_opus('/usr/lib/x86_64-linux-gnu/pwd libopus.so.0')
|
|
# discord.opus.load_opus()
|
|
# if not discord.opus.is_loaded():
|
|
# raise RuntimeError('Opus failed to load')
|
|
for vc in ctx.channel.category.voice_channels:
|
|
v = await vc.connect()
|
|
tcardaudio = discord.FFmpegPCMAudio(open("./assets/tcard.wav", "rb"))
|
|
v.play(tcardaudio)
|
|
while v.is_playing(): time.sleep(.1)
|
|
await v.disconnect()
|
|
else:
|
|
"""Send a T-Card to the immediate channel if this is a generic channel."""
|
|
await ctx.channel.send(embed=embed)
|
|
await ctx.send(content=f'```You have invoked the T-Card in the channel {ctx.channel.name}.```', hidden=True)
|
|
|
|
def setup(client):
|
|
client.add_cog(TCardCommand(client)) |