#python #discord #bots #discord.py
#python #Discord #боты #discord.py
Вопрос:
Я создаю discord-бота на python, и мне нужна помощь. У меня есть пользовательские команды для бота, такие как kick, ban и mute, и если вы, например, ударили или забанили кого-то, я хочу, чтобы это было сохранено в частном канале журнала. Где сохраняются все удары, полосы и отключения звука. Но я просто не могу заставить его работать. И я также хочу, чтобы это было embed.
Это мой код atm
@bot.command(name='kick', pass_context=True)
@commands.has_permissions(kick_members=True)
async def kick(context, member: discord.Member):
await member.kick()
log = discord.Embed(name='User ' member.display_name ' has been kicked')
save_log = discord.Embed(member.deplay_name, 'has been kicked')
await context.message.channel.send(embed=log)
log_channel = bot.get_channel(log_channel_id)
await log_channel.send(embed=save_log)
Спасибо за помощь!
Ответ №1:
member.deplay_name
Прежде всего, вы написали display
неправильно
Во-вторых, взгляните на вашу save_log
переменную. Вы создаете Embed
и передаете 2 строки конструктору. Вы не можете этого сделать. Взгляните на ваше log
вложение в предыдущей строке и сравните, что вы там сделали.
В-третьих, я ничего не могу найти о name
kwarg для an Embed
, вы, вероятно, имеете в виду title
?
@bot.command(name='kick')
@commands.has_permissions(kick_members=True)
async def kick(context, member: discord.Member):
await member.kick()
log = discord.Embed(title='User ' member.display_name ' has been kicked')
save_log = discord.Embed(title=member.display_name ' has been kicked')
await context.send(embed=log)
log_channel = bot.get_channel(log_channel_id)
await log_channel.send(embed=save_log)
PS Вы можете просто использовать ctx.send
вместо ctx.message.channel.send
, и pass_context
это не нужно.
Комментарии:
1. Спасибо вам обоим за помощь, я увидел, какие ошибки я допустил сейчас. Как и те небольшие ошибки, поскольку у Embed нет
name
kwarg и других вещей. Спасибо!
Ответ №2:
В вашем коде есть несколько ошибок:
- Начиная с версии v1.0.0 (перезапись), вам не нужно передавать
pass_context
декоратор
@bot.command()
- Встраивания не принимают
value
илиname
kwarg изменяет его наtitle
илиdescription
embed = discord.Embed(title='User kicked', description=f'{member.display_name} has been kicked')
- Вам не нужно использовать
context.message.channel.send
, вы можете просто:
await context.send('something')
- В
member.deplay_name
Ваш код будет выглядеть следующим образом:
@bot.command()
@commands.has_permissions(kick_members=True)
async def kick(ctx, member: discord.Member):
await member.kick()
log = discord.Embed(description=f'User {member.display_name} has been kicked')
save_log = discord.Embed(description=f'{member.display_name} has been kicked')
# you can use 'title' instead of 'description'
# and probably you want to use the same embed instead of creating two indentical
await ctx.send(embed=log)
log_channel = bot.get_channel(log_channel_id)
await log_channel.send(embed=save_log)
Источники: