#discord.py
#discord.py
Вопрос:
В первом примере после распределения ролей нескольким игрокам. Они регистрируются отдельно. Как мне сделать их в виде списка внутри встраивания?
@command(name="bulktake")
@has_permissions(manage_roles=True)
async def bulktake_role(self, ctx, targets: Greedy[Member], *, role: discord.Role):
if not len(targets):
await ctx.send("One or more required arguments are missing.")
else:
for target in targets:
await target.remove_roles(role)
embed = Embed(title="Roles Taken",
colour=role.colour,
timestamp=datetime.utcnow())
fields = [("--------------------------------------", f"***{target.display_name}*** successfully removed from ***{role.name}*** role by ***{ctx.author.display_name}***", False)]
for name, value, inline in fields:
embed.add_field(name=name, value=value, inline=inline)
await ctx.send(f"***{target.display_name}*** successfully removed from ***{role.name}*** role by ***{ctx.author.display_name}***")
await self.log_channel.send(embed=embed)
await ctx.message.delete()
Во втором примере это почти то же самое. Здесь я перечисляю участников в указанной роли. Они размещаются отдельно.
@command(name="list")
async def search_member(self, ctx, role_name):
role = discord.utils.find(lambda r: r.name == role_name, ctx.guild.roles)
userlist = []
for user in ctx.guild.members:
if role in user.roles:
userlist.append(user)
embed = Embed(title="Members in Role",
colour=role.colour,
timestamp=datetime.utcnow())
fields = [("Name", str(user.display_name), True),]
for name, value, inline in fields:
embed.add_field(name=name, value=value, inline=inline)
await ctx.send(embed=embed)
await ctx.send(f"{user.display_name} has the role {role.name}")
Когда я сохраняю оба примера в списке, а затем добавляю выходные данные, я не получаю результата. Не уверен, что я делаю неправильно. Я представил код, который работает, но выводит результаты отдельно. Заранее большое спасибо!
Ответ №1:
Вот пример простой команды для перечисления участников в роли.
Используется:
discord.utils.get
Чтобы получить роль в гильдии, используя имяRole.members
Чтобы получить список всех членов роли.enumerate
Возвращает индекс и элемент для списка
@bot.command(name="list")
async def search_member(ctx, *, role_name):
role = discord.utils.get(ctx.guild.roles, name=role_name)
embed = discord.Embed(title="Members in Role",
colour=role.colour,
timestamp=dt.datetime.utcnow())
for index, member in enumerate(role.members):
embed.add_field(name=f'Name {index 1}',
value=member.mention, inline=True)
await ctx.send(embed=embed)
Комментарии:
1. Ты потрясающий. Большое вам спасибо!