Не работают /commands в Discord Боте
import discord
from discord.ext import commands
from discord.commands import slash_command, Option
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
print(f'{bot.user.name} has connected to Discord!')
@slash_command(guild_ids=[id сервера], description="Забанить пользователя")
@commands.has_permissions(administrator=True)
async def ban(ctx, member: Option(discord.Member, "Укажите пользователя"), reason: Option(str, "Причина бана", required=False)):
await member.ban(reason=reason)
await ctx.respond(f'Пользователь {member.mention} был забанен по причине: {reason}')
@slash_command(guild_ids=[id сервера], description="Заглушить пользователя")
@commands.has_permissions(administrator=True)
async def mute(ctx, member: Option(discord.Member, "Укажите пользователя"), reason: Option(str, "Причина мута", required=False)):
muted_role = discord.utils.get(ctx.guild.roles, name='Muted')
await member.add_roles(muted_role)
await ctx.respond(f'Пользователь {member.mention} был заглушен по причине: {reason}')
@slash_command(guild_ids=[id сервера], description="Создать голосовой канал")
@commands.has_permissions(administrator=True)
async def create_voice_channel(ctx, channel_name: Option(str, "Название канала")):
guild = ctx.guild
existing_channel = discord.utils.get(guild.channels, name=channel_name)
if not existing_channel:
await guild.create_voice_channel(channel_name)
await ctx.respond(f'Голосовой канал "{channel_name}" был создан.')
else:
await ctx.respond(f'Канал "{channel_name}" уже существует.')
bot.run('мой api бота')
В Discord Developer Panel я создал бота, настроил его, выдал все разрешения, включил SERVER MEMBERS INTENT, MESSAGE CONTENT INTENT, PRESENCE INTENT, запустил код, ошибок не выдало, пишет, что логин успешный. При попытке ввода команды через /command я не вижу доступных команд моего бота, только встроенные на сервере.
Подскажите, что делать? Может что-то неправильно в коде?
Ответы (1 шт):
Автор решения: Unclear
→ Ссылка
Может быть где-то код будет написан тупо, но переписал ваш код, как умею и как знаю. Проверил у себя, работает. Пользуйтесь. Будут проблемы, обращайтесь. Для теста использовал последнюю версию библиотеки discord (не pycord и не другие).
from discord import utils, Client, Intents, Object, Member, Interaction
from discord.app_commands import CommandTree, default_permissions, describe
intents = Intents.default()
intents.members = True
bot = Client(intents=intents)
tree = CommandTree(bot)
guilds_id = [ТУТ ID РОЛЕЙ ЧЕРЕЗ ЗАПЯТУЮ] # ЗАПОЛНИТЬ ОБЯЗАТЕЛЬНО
guilds_objects = [Object(id) for id in guilds_id]
@bot.event
async def on_ready():
for guild in guilds_objects:
await tree.sync(guild=guild)
print(f"{bot.user.name} has connected to Discord!")
@tree.command(name="ban", description="Забанить пользователя", guilds=guilds_objects)
@default_permissions(administrator=True)
@describe(member="Укажите пользователя", reason="Причина бана")
async def ban(interaction: Interaction, member: Member, reason: str):
await member.ban(reason=reason)
await interaction.response.send_message(f"Пользователь {member.mention} был забанен по причине: {reason}")
@tree.command(name="mute", description="Заглушить пользователя", guilds=guilds_objects)
@default_permissions(administrator=True)
@describe(member="Укажите пользователя", reason="Причина мута")
async def mute(interaction: Interaction, member: Member, reason: str):
muted_role = utils.get(interaction.guild.roles, name="Muted")
await member.add_roles(muted_role)
await interaction.response.send_message(f"Пользователь {member.mention} был заглушен по причине: {reason}")
@tree.command(name="create_voice_channel", description="Создать голосовой канал", guilds=guilds_objects)
@default_permissions(administrator=True)
@describe(channel_name="Название канала")
async def create_voice_channel(interaction: Interaction, channel_name: str):
guild = interaction.guild
existing_channel = utils.get(guild.channels, name=channel_name)
if not existing_channel:
await guild.create_voice_channel(channel_name)
await interaction.response.send_message(f"Голосовой канал {f"{channel_name}"} был создан.")
else:
await interaction.response.send_message(f"Канал {f"{channel_name}"} уже существует.")
bot.run(token=token, reconnect=True)