Не получается получить значок {/}, что бот поддерживает команды в дискорде
Вот мой код, часть текста я закрыла знаком (_____) Писала код впервые и все еще не понимаю почему при вводе, моей команды нет во всплывающем окне. Буду благодарна любой помощи.
from webserver import keep_alive
import os
import discord
import asyncio
import aiohttp
from discord.ext import commands
from discord.ui import View, Button
import interactions
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='/', intents=intents, case_insensitive=True)
@bot.command()
async def treesync(ctx: commands.Context):
synced = await bot.tree.sync()
await ctx.send(f"Synced {len(synced)} commands")
@bot.command(name="wew")
async def wew(ctx: commands.Context):
# Проверьте, была ли команда вызвана пользователем и начинается ли она с '/wew'
if ctx.author != bot.user and ctx.message.content.startswith('/wew'):
# Получите вводимые пользователем данные
user_input = ctx.message.content[len('/wew'):].strip()
# Разделяем ввод пользователя на строки с помощью запятой
lines = user_input.split(',')
# Проверяем, достаточно ли данных введено пользователем
if len(lines) == 6:
block_title = "№ " + lines[0].strip()
embed = discord.Embed(title=block_title, color=0x000000)
# Проверяем, является ли lines[1] числом
if lines[1].isnumeric():
# Если это число, используем его напрямую
mention = lines[1]
else:
# Иначе обрабатываем как упоминание пользователя, Извлекаем id пользователя из строки
user_id = lines[1].strip().strip('<@!>').strip('<@').strip('>')
# Получаем объект пользователя по ID
mentioned_user = await bot.fetch_user(user_id)
# Проверяем, найден ли пользователь
if mentioned_user:
# Используем упоминание пользователя через @
mention = mentioned_user.mention
else:
# Если пользователь не найден, используем просто ID
mention = f"<@{user_id}>"
# Объединяем текст и значение в одну строку
field_value = f"**_____ {mention}**"
# Добавляем поле в embed
embed.add_field(name="\u00A0", value=field_value, inline=False)
embed.add_field(name="_____ " + lines[2], value="", inline=False)
embed.add_field(name="_____ " + lines[3], value="", inline=False)
embed.add_field(name="_____ " + lines[4], value="", inline=False)
embed.add_field(name="_____ " + lines[5], value="", inline=False)
embed.add_field(name="\u00A0", value="**Отправлено пользователем:** " + ctx.author.mention)
# Отправляем сообщение от бота с встроенным блоком
await ctx.send(embed=embed)
# Удаляем сообщение пользователя
await ctx.message.delete()
else:
embed = discord.Embed(title="Ошибка", description=f"_____, {ctx.author.mention}, _____*", color=discord.Color.red())
# Отправляем сообщение с delete_after
await ctx.message.reply(embed=embed, delete_after=5) # Закроется через 15 секунд
# Удаляем сообщение пользователя
await ctx.message.delete()
pass
Ответы (1 шт):
Автор решения: Çℏėτᶄắɤẵ Çℏėτɤᶉᶄắ
→ Ссылка
Потому что чтобы получить данный значок, нужно использовать слеш-команды, а не простые @bot.command().
Для этого:
- Так как
discord.pyустарела, будем использоватьpy-cord. Для этого в консоль вводимpip install py-cord. Не бойтесь, код переписывать не надо, так как структура у этих библиотек практически одинакова. - Замените это:
@bot.command(name="wew")
async def wew(ctx: commands.Context):
pass
На более новую версию - слеш-команду:
@bot.slash_command(name="wew", description='Описание команды')
async def wew(ctx: commands.Context):
pass
Собственно всё, подробнее о слеш-командах читайте в документации