mumblecord/src/commands.py

114 lines
3.4 KiB
Python

import discord
def register_all_commands(bot):
bot.register_command("guilds", cmd_guilds)
bot.register_command("listvc", cmd_listvc)
bot.register_command("activevc", cmd_activevc)
bot.register_command("vcinfo", cmd_vcinfo)
def cmd_guilds(bot, text, user, arg, argv):
"""
Show all guilds
"""
response = ""
for guild in bot.discord.guilds:
response += f"{guild.id}: {guild.name}<br />\n"
user.send_text_message(response)
def cmd_listvc(bot, text, user, arg, argv):
"""
Show voice channels in all guilds,
or in a specific guild if the ID or name of guild has been given
"""
if not argv:
response = ""
for guild in bot.discord.guilds:
response += f"{guild.id}: {guild.name}<br />\n"
for vc in guild.voice_channels:
response += f">{vc.id}: {vc.name}<br />\n"
else:
guild = None
try:
guild = discord.utils.find(lambda g: g.id == int(argv[0]), bot.discord.guilds)
except ValueError:
pass
if not guild:
guild = discord.utils.find(lambda g: g.name == arg, bot.discord.guilds)
if not guild:
user.send_text_message("no guild found")
return
response = f"{guild.name}: <br />\n"
for vc in guild.voice_channels:
response += f">{vc.id}: {vc.name}<br />\n"
user.send_text_message(response)
def cmd_activevc(bot, text, user, arg, argv):
"""
Show all voice channels with users inside
"""
if not argv:
response = ""
for guild in bot.discord.guilds:
vcs_with_active_members = []
for vc in guild.voice_channels:
if len(vc.members) > 0:
vcs_with_active_members.append(vc)
if len(vcs_with_active_members) > 0:
response += f"{guild.id}: {guild.name}<br />\n"
for vc in vcs_with_active_members:
response += f">{vc.id}: {vc.name} ({len(vc.members)})<br />\n"
user.send_text_message(response)
else:
user.send_text_message("no active voice channels found")
def cmd_vcinfo(bot, text, user, arg, argv):
try:
if len(argv) >= 1:
vc_id = int(argv[0])
if len(argv) == 2:
guild_id = int(argv[1])
except TypeError:
user.send_text_message("strings are not allowed: please use the ID and not the name")
if len(argv) == 1:
guild_id = None
vc = get_vc(bot.discord, guild_id, vc_id)
if not vc:
user.send_text_message("no vc found")
response = f"""Name: {vc.name}<br />\n
Guild: {vc.guild.name}<br />\n
Members: {len(vc.members)}<br />\n
"""
if len(vc.members) > 0:
response += "<br />\n"
for member in vc.members:
response += f"{member.name}<br />\n"
user.send_text_message(response)
def get_vc(ctx, guild, identifier):
"""
Try to get a Discord voice channel by ID
ctx: discord.py context
identifier: int: ID of the guild
"""
if not guild:
for g in ctx.guilds:
vc = discord.utils.find(lambda vc: vc.id == identifier, g.voice_channels)
if vc is not None:
return vc
else:
g = discord.utils.find(lambda g: g.id == identifier, ctx.guilds)
if not g:
return None
vc = discord.utils.find(lambda vc: vc.id == identifier, g.voice_channels)
return vc