Хорошо, поэтому сначала вам нужно импортировать команды с разногласий вверху вашего файла. Ваша переменная бота вызывает это при получении префикса:
from discord.ext import commands
Далее вам больше не нужно pass_content=True
в @bot.command()
, так как контекст теперь всегда передается. Документация с указанием здесь .
Я заметил, что вы проверяете, есть ли у автора роль по имени. Хотя это работает, лучшим методом является проверка, имеет ли автор полномочия на управление ролями или он / она является администратором. Это набирается так:
@commands.has_permissions(administrator=True)
Полный список различных аргументов, которые вы можете передать этому декоратору, находится здесь .
Теперь относительно вашего сообщения об ошибке , у вас есть параметр с именем members в вашей командной функции. Поскольку это позиционный параметр, вы должны указать его при вводе команды в разногласиях. Однако в вашем коде ничего не происходит, поэтому вы можете удалить его:
async def addrole(ctx):
Более подробную информацию о параметрах команды можно найти здесь .
В вашей переменной именованный участник, вы можете изменить ctx.message.author
на ctx.author
.
В переменной роли при попытке получить роли на вашем сервере мы больше не используем member.server.roles
. Он был изменен на guild
, как показано в документах. Вот как вы его напечатаете:
role = get(member.guild.roles, name="Test")
И последнее изменение - добавление роли к члену. Перезаписанная версия discord.py удалила много функций из bot
. Функция add_roles
теперь вызывается из объекта-члена, поэтому это можно записать так:
await member.add_roles(role)
Мы берем переменную-член (ctx.author, которая является объектом-членом) и добавляем роль (переменная роли, которая выбирает объект роли с именем Test) для этого члена. Документы по нему находятся здесь .
Итак, ваш код должен выглядеть примерно так:
from discord.ext import commands
from discord.utils import get
import discord
TOKEN = '########' # Taken out
BOT_PREFIX = '!'
ROLE = 'Bot'
bot = commands.Bot(command_prefix=BOT_PREFIX)
@bot.event
async def on_ready():
print(f"Logged in as: {bot.user.name}")
@bot.command()
@commands.has_permissions(administrator=True)
async def addrole(ctx):
member = ctx.author
role = get(member.guild.roles, name="Test")
await member.add_roles(role)
bot.run(TOKEN)
Надеюсь, это поможет с вашей проблемой :-) Вот несколько ссылок это поможет вам лучше понять, как работает discord.py-rewrite:
Миграция в ветвь перезаписи
Discord.py Rewrite API