114 lines
3.4 KiB
Python
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
|