Удар сохраняет канал i log с помощью встраивания

#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:

В вашем коде есть несколько ошибок:

  1. Начиная с версии v1.0.0 (перезапись), вам не нужно передавать pass_context декоратор
 @bot.command()
  
  1. Встраивания не принимают value или name kwarg изменяет его на title или description
 embed = discord.Embed(title='User kicked', description=f'{member.display_name} has been kicked')
  
  1. Вам не нужно использовать context.message.channel.send , вы можете просто:
 await context.send('something')
  
  1. В 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)
  

Источники: