首页 > 解决方案 > Discord Py 需要在后台默默地给我的机器人角色

问题描述

我还没有弄清楚如何在机器人本身上添加/删除角色,而不在聊天中执行命令。它必须默默地在后台。有人可以帮帮我吗。

下面的当前代码确实有效,但不是我想要的方式。我不希望机器人键入命令来赋予自己一个角色,我需要它自动静默地赋予它而不执行任何聊天消息。我的理想想法是以某种方式在 on_ready 事件中执行 addRole 函数,而不发送消息来获取角色。

import aiohttp
from datetime import datetime
from dotenv import load_dotenv
from discord.ext import commands
import discord
import os

load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
bot = commands.Bot(command_prefix="$")
bot.remove_command('help')

@bot.event
async def on_ready():
    await bot.wait_until_ready()
    bot.session = aiohttp.ClientSession()
    await bot.get_channel(402353715718277809).send("$addRole")

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


bot.run(DISCORD_TOKEN)

标签: pythondiscord.py

解决方案


discord.py 中的guild对象有一个.me属性(docs),它代表你在那个公会中。

因此,在开始时,您可以根据它的 id(在 on_ready 事件中)获取该公会,并使用 add_roles 为自己分配一个角色,示例代码(guildid 是您希望该角色所在的公会的 id):

guild = bot.get_guild(guildid)
role = discord.utils.get(guild.roles, name="market_green")
await guild.me.add_roles(role)

推荐阅读