Не работает код по выдачи ролей в Discord?
import discord
from discord import client
from discord.ext import commands
from discord.utils import get
client = commands.Bot(command_prefix='/')
@client.command()
async def ping(ctx):
await ctx.send('pong')
@client.command()
async def addrole(ctx,role: discord.role, user: discord.member):
if ctx.author.guild_permissions.administrator:
await user.add_role(role)
await ctx.send(f"Роль выдана! {role.mention} to {user.mention}.")
@client.command()
async def removerole(ctx, role: discord.role, user: discord.member):
if ctx.author.guild_permissions.administrator:
await user.remove_role(role)
await ctx.send(f"Роль убрана! {role.mention} to {user.mention}.")
client.run('Token')
При попытки ввести !addrole @user @role допустим - вылезает вот это:
Ignoring exception in command addrole:
Traceback (most recent call last):
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 467, in _actual_conversion
return converter(argument)
TypeError: 'module' object is not callable
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 855, in invoke
await self.prepare(ctx)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 789, in prepare
await self._parse_arguments(ctx)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 697, in _parse_arguments
transformed = await self.transform(ctx, param)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 552, in transform
return await self.do_conversion(ctx, converter, argument, param)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 505, in do_conversion
return await self._actual_conversion(ctx, converter, argument, param)
File "E:\Program_Files_x86\Python\lib\site-packages\discord\ext\commands\core.py", line 476, in _actual_conversion
raise BadArgument('Converting to "{}" failed for parameter "{}".'.format(name, param.name)) from exc
discord.ext.commands.errors.BadArgument: Converting to "discord.role" failed for parameter "role".
Ответы (1 шт):
Автор решения: denisnumb
→ Ссылка
Вы пишете "При попытки ввести !addrole @user @role" появляется ошибка.
Суть в том, что у вас функция принимает аргументы в порядке: роль, пользователь, а вы отправляете ей пользователь, роль
Вот, посмотрите сами:
async def addrole(ctx,role: discord.role, user: discord.member):
^^^ ^^^^
роль пользователь
Так что попробуйте вызывать !addrole @role @user, только не с восклицательного знака, а со слеша (/), потому что он у вас указан в префиксе.
Также для работы с участниками сервера было бы неплохо выдать намерения (intents).
Замените строку:
client = commands.Bot(command_prefix='/')
На эту:
client = commands.Bot(command_prefix='/', intents = discord.Intents.all())