Discord py - Почему моя команда бана не работает?

Я хотел бы создать команду бана с такими функциями, как встраивание ответов, функция журнала и отслеживание пользователя, когда он забанен.

У меня почему-то не запускается команда бана. При выполнении команды ничего не происходит и if member is None у меня тоже не работает.

Я разместил свой код в предоставленной ссылке: https://hastebin.com/ubayatiqey.py

Почему мой бот не отвечает на мою команду =ban? Могу ли я поймать ошибку, чтобы исправить ее? Кроме того, почему строки с 41 по 48 не работают так, как я ожидаю?

moved [my code to hastebin] Я ничего не вижу. Подчеркивает преимущество включения хотя бы ключевой части в ваш пост.
greybeard 12.12.2020 06:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
213
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

На первый взгляд, это может быть связано с тем, что у вас нет значений по умолчанию для параметров. Кроме того, я думаю, вам следует начать использовать обработку ошибок для конкретных команд.

Вы можете использовать {command.name}.error над функцией, чтобы обрабатывать ошибки только этой конкретной команды.

Ниже я добавил несколько вещей и комментариев, чтобы показать, что может быть решением этой проблемы.

#The below code bans player.
@bot.command()
@commands.has_permissions(ban_members = True)
async def ban(ctx, member : discord.Member = None, *, reason = None): # Adding "= None" to the end of parameters will tell the code that if someone who uses the command doesn't give a reason or a member, just set the values to None.
    if member is None:
        await ctx.send("⚠️ | Forgot Username")
    if reason is None:
        reason = "Adminban"
    else:
        reason = reason
 
    # Funktionen für Nachrichten
    embed = discord.Embed(title = "📛 » Du wurdest ausgeschlossen!", description=f"Dein Account wurde so eben aus\nunserem Discord-Server ausgeschlossen.\n\n───────────────────────── \n🚧 ** | DETAILS ZU DEINER SPERRUNG..**\n Hier siehst du nun einige Details zu deiner Sperrung.\nDieses dienen sowohl als Info für dich, als auch für uns.\n\n┏👮‍♂️〢**Gesperrt von:** `{ctx.author}`\n┗🚨〢**Grund:** `{reason}`\n\n───────────────────────── \n**🔐 » Du möchtest wieder auf unseren Server?**\nDann fülle dieses Formular aus:** https://bl4cklist.de/unban **", color=0xf04747)
    embed.set_thumbnail(url = "https://i.imgur.com/4np2bdK.png")
    embed.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
    embed.set_image(url = "https://i.imgur.com/Ua2y6oF.png")
 
    response = choice([
    'https://media1.giphy.com/media/9jCTfM9QIzPLqAwkE9/giphy.gif',
    'https://media4.giphy.com/media/lY26OFBfrFFeecJEtT/giphy.gif',
    'https://media4.giphy.com/media/Q4Eu7AZO4FY14FMnTo/giphy.gif',
    'https://media3.giphy.com/media/BSdqZU7F0eRlXtAsPp/giphy.gif'
    ])
 
    embed1 = discord.Embed(title=f"🔒 » {member.name} wurde gesperrt!", description=f"Genaue Informationen zu der Sperrung:\n\n┏👮‍♂️〢**Ausgeschlossen von:** `{ctx.author}`\n┗🚨〢**Grund der Sperrung:** `{reason}`", color=0xe74c3c)
    embed1.set_thumbnail(url=f"{member.avatar_url}")
    embed1.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
    embed1.set_image(url=f"{response}")
 
    embed2 = discord.Embed(title = "🔒 » Ein Mitglied wurde gesperrt!", description=f"Hier siehst du nun einige Details zur Sperrung.\n─────────────────────────\n\n» **Grund der Sperrung:** `{reason}`\n» **Name des Users:** `{member}`\n» **ID des Gesperrten:** `{member.id}`\n\n─────────────────────────", color=0xf04747)
    embed2.set_thumbnail(url=f"{member.avatar_url}")
    embed2.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
 
    channel = bot.get_channel(755014990465073306)
    # Funktionen für Nachrichten
 
    await member.send(embed=embed)
    await member.ban(reason=reason)
    await ctx.send(embed=embed1)
    await channel.send(embed=embed2)

# This part will track the errors specifically for the ban command only, and in this case, will print out the error 
@ban.error
async def ban_error(ctx, error):
    print (error)

У вас была одна ошибка, которая помешала запуску всего вашего кода. когда вы написали async def ban(ctx, member : discord.Member, *, reason):, это было на пару строк не так. Прежде всего, вы никогда не устанавливали по умолчанию для члена значение none, и вы никогда не устанавливали значение по умолчанию для причины равным нулю, так что оба эти аргумента по-прежнему являются обязательными аргументами. Если мы переработаем код, то получим async def ban(ctx, member : discord.Member=None, *, reason=None):.

Надеюсь, это помогло! Если у вас есть какие-либо вопросы об этом коде или есть непредвиденные ошибки, не стесняйтесь следить за ними!

Прочитав ваш код, я заметил несколько вещей. Во-первых, вы пытались напечатать error, которая, похоже, является переменной, которая никогда не определяется в вашем коде. Если вы хотите печатать ошибку всякий раз, когда она возникает, я бы порекомендовал вам создать обработчик ошибок для команды ban. Во-вторых, вы пытаетесь использовать member и reason в качестве необязательных параметров, хотя они никогда не устанавливаются как необязательные, я бы порекомендовал изменить и это. Я также заметил, что вы пытались использовать намерения, у меня нет возможности проверить, включены ли у вас намерения или нет, но вам нужно включить их на портале разработчиков Discord. Я бы сказал, что вам следует попробовать запустить код без намерений или включить их на портале разработчиков Discord. Дайте мне знать, если это не решило вашу проблему. Если вы хотите, чтобы я внес все изменения, вы можете скопировать этот код и вставить его в свою IDE:

@bot.command()
@commands.has_permissions(ban_members = True)
async def ban(ctx, member : discord.Member=None, *, reason=None):
    if member is None:
        await ctx.send("⚠️ | Forgot Username")
        return
    if reason is None:
        reason = "Adminban"
    else:
        reason = reason
 
    # Funktionen für Nachrichten
    embed = discord.Embed(title = "📛 » Du wurdest ausgeschlossen!", description=f"Dein Account wurde so eben aus\nunserem Discord-Server ausgeschlossen.\n\n───────────────────────── \n🚧 ** | DETAILS ZU DEINER SPERRUNG..**\n Hier siehst du nun einige Details zu deiner Sperrung.\nDieses dienen sowohl als Info für dich, als auch für uns.\n\n┏👮‍♂️〢**Gesperrt von:** `{ctx.author}`\n┗🚨〢**Grund:** `{reason}`\n\n───────────────────────── \n**🔐 » Du möchtest wieder auf unseren Server?**\nDann fülle dieses Formular aus:** https://bl4cklist.de/unban **", color=0xf04747)
    embed.set_thumbnail(url = "https://i.imgur.com/4np2bdK.png")
    embed.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
    embed.set_image(url = "https://i.imgur.com/Ua2y6oF.png")
 
    response = choice([
    'https://media1.giphy.com/media/9jCTfM9QIzPLqAwkE9/giphy.gif',
    'https://media4.giphy.com/media/lY26OFBfrFFeecJEtT/giphy.gif',
    'https://media4.giphy.com/media/Q4Eu7AZO4FY14FMnTo/giphy.gif',
    'https://media3.giphy.com/media/BSdqZU7F0eRlXtAsPp/giphy.gif'
    ])
 
    embed1 = discord.Embed(title=f"🔒 » {member.name} wurde gesperrt!", description=f"Genaue Informationen zu der Sperrung:\n\n┏👮‍♂️〢**Ausgeschlossen von:** `{ctx.author}`\n┗🚨〢**Grund der Sperrung:** `{reason}`", color=0xe74c3c)
    embed1.set_thumbnail(url=f"{member.avatar_url}")
    embed1.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
    embed1.set_image(url=f"{response}")
 
    embed2 = discord.Embed(title = "🔒 » Ein Mitglied wurde gesperrt!", description=f"Hier siehst du nun einige Details zur Sperrung.\n─────────────────────────\n\n» **Grund der Sperrung:** `{reason}`\n» **Name des Users:** `{member}`\n» **ID des Gesperrten:** `{member.id}`\n\n─────────────────────────", color=0xf04747)
    embed2.set_thumbnail(url=f"{member.avatar_url}")
    embed2.set_footer(text=f"BL4CKLIST.DE👾GAMING | Discord-Server", icon_url = "https://i.imgur.com/4np2bdK.png")
 
    channel = bot.get_channel(755014990465073306)
    # Funktionen für Nachrichten
 
    await member.send(embed=embed)
    await member.ban(reason=reason)
    await ctx.send(embed=embed1)
    await channel.send(embed=embed2)


# Error handler
@ban.error()
async def ban_error(ctx, error):
    if isinstance(error):
        print(error)

Другие вопросы по теме