@gfdsseg

Ошибка в кода бота дискорда. Как сделать нормально?

Ошибка:

discord.ext.commands.errors.CommandRegistrationError: The command help is already an existing command or alias.


Код:

import discord
from discord.ext.commands import has_permissions
from discord.ext import commands

PREFIX = '&'

client = commands.Bot( command_prefix = PREFIX )


@client.event

async def on_ready():
    print( 'Bot connected' )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def clear( ctx, amount = 100 ):
    await ctx.channel.purge( limit = amount )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def kick( ctx, member: discord.Member, *, reason = None ):
    await ctx.channel.purge( limit = 1 )

    await member.kick( reason = reason )
    await ctx.send( f'kick user { member.mention }' )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def ban( ctx, member: discord.Member, *, reason = None ):
    await ctx.channel.purge( limit = 1 )

    await member.ban( reason = reason )
    await ctx.send( f'ban user { member.mention }' )


@client.command( pass_context = True )

async def help( ctx ):
    ebm = discord.Embed( title = 'Все наши команды' )

    emb.add_field( name = '{}help'.format( PREFIX ), value = 'Помощь по командам' )
    emb.add_field( name = '{}helpme'.format( PREFIX ), value = 'Помощь по командам в личку' )
    emb.add_field( name = '{}clear'.format( PREFIX ), value = 'очистка чата (только для админов)' )
    emb.add_field( name = '{}kick'.format( PREFIX ), value = 'кикнуть юзера (только для админов)' )
    emb.add_field( name = '{}ban'.format( PREFIX ), value = 'забанить юзера (только для админов)' )

    await ctx.send( embed = emb )


client.run( 'мой токен' )


если забрать from discord.ext.commands import has_permissions то ошибка такая:

NameError: name 'has_permissions' is not defined

но я ее решил:

from discord.ext.commands import has_permissions

все работало пока не вставил в код:

@client.command( pass_context = True )

async def help( ctx ):
    ebm = discord.Embed( title = 'Все наши команды' )

    emb.add_field( name = '{}help'.format( PREFIX ), value = 'Помощь по командам' )
    emb.add_field( name = '{}helpme'.format( PREFIX ), value = 'Помощь по командам в личку' )
    emb.add_field( name = '{}clear'.format( PREFIX ), value = 'очистка чата (только для админов)' )
    emb.add_field( name = '{}kick'.format( PREFIX ), value = 'кикнуть юзера (только для админов)' )
    emb.add_field( name = '{}ban'.format( PREFIX ), value = 'забанить юзера (только для админов)' )

    await ctx.send( embed = emb )
  • Вопрос задан
  • 743 просмотра
Пригласить эксперта
Ответы на вопрос 3
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Переведите текст ошибки гуглом и попробуйте сами ответить на свой вопрос.
Ответ написан
Комментировать
@Bot-Developer
Начинающий разработчик ботов
Вы могли просто перевести текст ошибки и понять в чем проблема, но помогу. Добавьте client.remove_command('help')
Полный код:
import discord
from discord.ext.commands import has_permissions
from discord.ext import commands

PREFIX = '&'

client = commands.Bot( command_prefix = PREFIX )


@client.event

async def on_ready():
    print( 'Bot connected' )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def clear( ctx, amount = 100 ):
    await ctx.channel.purge( limit = amount )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def kick( ctx, member: discord.Member, *, reason = None ):
    await ctx.channel.purge( limit = 1 )

    await member.kick( reason = reason )
    await ctx.send( f'kick user { member.mention }' )


@client.command( pass_context = True )
@has_permissions( administrator = True )

async def ban( ctx, member: discord.Member, *, reason = None ):
    await ctx.channel.purge( limit = 1 )

    await member.ban( reason = reason )
    await ctx.send( f'ban user { member.mention }' )


@client.command( pass_context = True )

async def help( ctx ):
    ebm = discord.Embed( title = 'Все наши команды' )

    emb.add_field( name = '{}help'.format( PREFIX ), value = 'Помощь по командам' )
    emb.add_field( name = '{}helpme'.format( PREFIX ), value = 'Помощь по командам в личку' )
    emb.add_field( name = '{}clear'.format( PREFIX ), value = 'очистка чата (только для админов)' )
    emb.add_field( name = '{}kick'.format( PREFIX ), value = 'кикнуть юзера (только для админов)' )
    emb.add_field( name = '{}ban'.format( PREFIX ), value = 'забанить юзера (только для админов)' )

    await ctx.send( embed = emb )


client.run( 'мой токен' )

Также вы могли исправить ошибку с установкой прав для команды без строчки from discord.ext.commands import has_permissions
Вы могли использовать @commands.has_permissions(administrator=True) вместо @has_permissions(administrator=True)
Ответ написан
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Команда help уже есть вот код замените его на ваш:

client = commands.Bot( command_prefix = PREFIX )
client.remove_command('help')

вот команда help лучше:

@client.command( pass_context = True )

async def help( ctx ):
    ebm = discord.Embed( title = 'Все наши команды' )

    emb.add_field( name = f'{ PREFIX }help',  value = 'Помощь по командам' )
    emb.add_field( name = f'{ PREFIX }helpme', value = 'Помощь по командам в личку' )
    emb.add_field( name = f'{ PREFIX }clear', value = 'очистка чата (только для админов)' )
    emb.add_field( name = f'{ PREFIX }kick', value = 'кикнуть юзера (только для админов)' )
    emb.add_field( name = f'{ PREFIX }ban', value = 'забанить юзера (только для админов)' )

    await ctx.send( embed = emb )


напишите мне в дискорд я вам много чего покажу: Xpeawey#6098
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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