member = ctx.message.author
role = discord.utils.get(member.guild.roles, name='Egg')
await member.add_roles(role)
Сначала получаешь автора сообщения (т.е. отправителя команды), потом выдаёшь ему роль, потом удивляешься почему так.
(К слову, а зачем делать это командой? через интерфейс дискорда в разы быстрее).
Ну собственно,
async def role(ctx):
Ты вообще параметры у команды не принимаешь.
Сделай так:
async def role(ctx, target: discord.Member):
Тогда discord.py попытается распарсить переданный аргумент как пользователя.
@bot.command(pass_context=True)
@commands.has_role('Старший Научный Сотрудник')
async def role(ctx, target: discord.Member):
member = ctx.message.author
role = discord.utils.get(member.guild.roles, name='Научный Сотрудник')
await member.add_roles(role)
await ctx.send("Роль выдана!")
Тоже не сработало, я это делаю для сервера, чтобы определённая роль, могла выдать только 1 определённую роль
Noobik2099, ну блин, ты свой код вообще понимаешь или пишешь наугад?
member = ctx.message.author ты так и не исправил, у тебя будет member = target
Если бот не отвечает, вставляй отладочные сообщения (хотя бы print), чтобы понять, есть ли у бота права на выдачу ролей, и вообще активируется ли код.
@client.command(aliases = ['выдать', 'дать'])
@commands.has_role('SNS')
async def role(ctx, member: discord.Member):
role = ctx.guild.get_role(
id РОЛИ
)
await ctx.author.add_roles(role)
await ctx.send(
embed=discord.Embed(
description=f"**Вы взяли себе роль {role.mention}**",
color=discord.Color.purple(),
)
)
или
@client.command()
async def give(ctx, member: discord.Member, role: discord.Role):
try:
getrole = discord.utils.get(ctx.guild.roles, id = role.id)
await member.add_roles(getrole)
except Exception:
await ctx.send(f'Неверное имя пользователя или роль! ({member}, {role})')