#python #python-3.x #discord.py #discord.py-rewrite
#python #python-3.x #discord.py #discord.py-переписать
Вопрос:
Я хотел бы создать команду запрета с такими функциями, как встраивание ответов, функция ведения журнала и dm-ing пользователя, когда он забанен.
По какой-то причине моя команда запрета не выполняется. При выполнении команды ничего не происходит, и if member is None
у меня тоже не работает.
Я разместил свой код по предоставленной ссылке: https://hastebin.com/ubayatiqey.py
Почему мой бот не отвечает на мою =ban
команду? Могу ли я поймать ошибку, чтобы исправить ее? Кроме того, почему строки с 41 по 48 не работают так, как я ожидаю?
Комментарии:
1.
moved [my code to hastebin]
Я ничего не вижу. Подчеркивает преимущество включения хотя бы ключевой части в ваш пост.
Ответ №1:
На первый взгляд, это может быть связано с тем, что у вас нет значений по умолчанию для параметров. Кроме того, я думаю, вам следует начать использовать обработку ошибок, специфичную для команды.
Вы можете использовать {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 ausnunserem Discord-Server ausgeschlossen.nn───────────────────────── 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.nn┏👮♂️〢**Gesperrt von:** `{ctx.author}`n┗🚨〢**Grund:** `{reason}`nn───────────────────────── 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:nn┏👮♂️〢**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─────────────────────────nn» **Grund der Sperrung:** `{reason}`n» **Name des Users:** `{member}`n» **ID des Gesperrten:** `{member.id}`nn─────────────────────────", 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)
Ответ №2:
У вас была одна ошибка, из-за которой весь ваш код не был запущен. когда вы писали async def ban(ctx, member : discord.Member, *, reason):
, это было на пару строк меньше. Прежде всего, вы никогда не устанавливали значение member по умолчанию none , и вы никогда не устанавливали значение reason по умолчанию none, поэтому оба эти аргумента по-прежнему являются обязательными. Если мы переработаем код, который получим async def ban(ctx, member : discord.Member=None, *, reason=None):
.
Надеюсь, это помогло! Если у вас есть какие-либо вопросы об этом коде или есть непредвиденные ошибки, не стесняйтесь следить за ними!
Ответ №3:
После просмотра вашего кода я заметил несколько вещей. Во-первых, вы пытались напечатать error
, которая, по-видимому, является переменной, которая никогда не определяется в вашем коде. Если вы хотите печатать ошибку всякий раз, когда она возникает, я бы рекомендовал вам создать обработчик ошибок для команды запрета. Во-вторых, вы пытаетесь использовать member
and reason
в качестве необязательных параметров, хотя они никогда не устанавливаются как необязательные, я бы рекомендовал изменить и это. Я также заметил, что вы пытались использовать intents, у меня нет способа проверить, включены ли у вас intents или нет, но вам нужно включить их на портале разработчиков 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 ausnunserem Discord-Server ausgeschlossen.nn───────────────────────── 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.nn┏👮♂️〢**Gesperrt von:** `{ctx.author}`n┗🚨〢**Grund:** `{reason}`nn───────────────────────── 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:nn┏👮♂️〢**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─────────────────────────nn» **Grund der Sperrung:** `{reason}`n» **Name des Users:** `{member}`n» **ID des Gesperrten:** `{member.id}`nn─────────────────────────", 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)