赋予机器人角色的问题

时间:2021-01-23 03:50:08

标签: python discord.py

我正在创建一个不和谐的机器人来改变它自己的角色。目前我只是想给它一个角色。

import json
import discord
import os
import bs4
from dotenv import load_dotenv
from discord.ext import commands
from datetime import datetime
import time
import re
from string import digits, ascii_letters
from discord.ext.commands import Bot
import aiohttp
from discord.utils import get

load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
bot = commands.Bot(command_prefix="$")
bot.remove_command('help')
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")

url = "hidden"

@bot.event
async def on_ready():
    await bot.wait_until_ready()
    bot.session = aiohttp.ClientSession()
    print("It's ready - fetching btc price")
    while True:
        async with bot.session.get(url) as resp:
            resp = await resp.text()
            auth = [MY BOTS ID]
            role = [ROLE ID, I.E 9234824234626534]
            await bot.add_roles(auth, role)

错误AttributeError: 'Bot' object has no attribute 'add_roles'

如何给我的机器人一个角色或删除一个角色?它必须在定义 on_ready()

1 个答案:

答案 0 :(得分:1)

要添加角色,您需要 member 对象。为了得到这个,你需要知道成员所在的公会,所以这在 on_ready() 中是不可能的,除非你想遍历公会缓存中的每个公会(for guild in bot.guilds:,如果你是真的有兴趣这样做,但仍然一定要阅读本文的其余部分)。

首先,为了能够获得 member 对象,您需要启用 intents。您只需将您的 bot ClientUser 更改为 commands.Bot(command_prefix="$", intents = discord.Intents.all()),并启用您在 Developer Portal 上启用的意图即可实现此目的。

对于我将向您展示的示例,我将使用命令,但如果您真的想使用 on_ready() 函数,您可以将每个 ctx.guild 替换为 guild当您遍历公会缓存时,如上所示。我还使用了 discord.utils.get 方法来定义我的角色,你使用的任何方法都可以,只要你最终得到一个 role 对象

@bot.command()
def addRole(ctx):
    role = discord.utils.get(ctx.guild.roles, name = "Role Name")
    member = ctx.guild.get_member(bot.user.id)
    await member.add_roles(role)