Задать вопрос
@Effectys

Почему могут не работать команды в discord.py?

Не работают команды и ивенты кроме userinfo, с чем может быть связано?
Часть кода:

import discord
from discord.ext import commands
import json
import os
from PIL import Image
import asyncio
import random
import datetime

file = open('config.json', 'r')
config = json.load(file)

intents = discord.Intents.all()
intents.message_content = True
bot = commands.Bot(config['prefix'], intents=intents, help_command=None)
colors = [0xFFE4E1, 0x00FF7F, 0xD8BFD8, 0xDC143C, 0xFF4500, 0xDEB887, 0xADFF2F, 0x800000, 0x4682B4, 0x006400, 0x808080, 0xA0522D, 0xF08080, 0xC71585, 0xFFB6C1, 0x00CED1]

@bot.event
async def on_ready():
    await bot.change_presence(status=discord.Status.dnd, activity=discord.Game(name=".help"))
    print('Bot connected')

# Command not found
@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        embed = discord.Embed(
        description = f'{ctx.author.mention}, команда не найдена!', 
        colour = discord.Color.red()
        )
        sent_message = await ctx.send(embed=embed)
        await asyncio.sleep(20)
        await sent_message.delete() 

# Информация о сервере
@bot.event
async def on_message(message):
    if message.content == '.serverinfo':
        server = message.guild
        guild = message.guild
        embed = discord.Embed(title=f"{guild.name} Server Information", color=0x00ff00)
        embed.add_field(name="Server Name", value=guild.name, inline=True)
        embed.add_field(name="Server ID", value=guild.id, inline=True)
        embed.add_field(name="Server Owner", value=guild.owner, inline=True)
        embed.add_field(name="Server Region", value=guild.region, inline=True)
        embed.add_field(name="Number of Members", value=guild.member_count, inline=True)
        embed.add_field(name="Number of Channels", value=len(guild.channels), inline=True)
        embed.add_field(name="Number of Roles", value=len(guild.roles), inline=True)
        created_at_gmt3 = server.created_at + datetime.timedelta(hours=3)
        embed.add_field(name="Created At (GMT+3)", value=created_at_gmt3.strftime("%d.%m.%Y %H:%M"), inline=True)
        embed.set_thumbnail(url=guild.icon_url)
        await message.channel.send(embed=embed)

# Информация о пользователе
@bot.event
async def on_message(message):
    if message.content == '.userinfo':
        author = message.author
        user = message.mentions[0] if message.mentions else message.author
        if user.status == discord.Status.dnd:
            status = "Не беспокоить"
        elif user.status == discord.Status.idle:
            status = "Отсутствует"
        elif user.status == discord.Status.offline:
            status = "Не в сети"
        elif user.status == discord.Status.online:
            status = "В сети"
        else:
            status = user.status
        embed = discord.Embed(title="User Information", color=0x00ff00)
        embed.add_field(name="Username", value=user.name, inline=True)
        embed.add_field(name="ID", value=user.id, inline=True)
        embed.add_field(name="Status", value=status, inline=True)
        embed.add_field(name="Top Role", value=user.top_role, inline=True)
        created_at_gmt3 = user.created_at + datetime.timedelta(hours=3)
        joined_at_gmt3 = user.joined_at + datetime.timedelta(hours=3)
        embed.add_field(name="Joined At (GMT+3)", value=joined_at_gmt3.strftime("%d.%m.%Y %H:%M"), inline=True)
        embed.add_field(name="Created At (GMT+3)", value=created_at_gmt3.strftime("%d.%m.%Y %H:%M"), inline=True)
        embed.set_author(name=f"{user.name}", icon_url=user.avatar.url)
        embed.set_image(url=message.author.avatar)
        
        await message.channel.send(embed=embed)


@bot.command(pass_context=False, name='ping')
async def ping(ctx):
    embed = discord.Embed(
    title = 'Проверка пинга',
    description = f':alarm_clock: Ping: {round(bot.latency * 1000)} ms',
    color = 0xFFA500
    )
    sent_message = await ctx.send(embed=embed)
    await asyncio.sleep(20)
    await sent_message.delete()
  • Вопрос задан
  • 262 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Почему у тебя два on_message()? И почему ты реализуешь команды в on_message(), если ты знаешь как пользоваться @bot.command()?
Ответ написан
Комментировать
@vladislavlisitsyn
В евентах on_message() необходимо вставить следующую строчку в конце await client.process_commands(message)
Должно получиться что то вроде
@bot_event
awync def on_message(message):
    #свой код
    await client.process_commands(message)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы