python - 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)
解决方案
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)
推荐阅读
- ruby-on-rails - SimpleForm 将表单发布到不同的控制器和操作
- graphql-js - Graphcool RELAY 订阅:订阅边
- php - 从 SQL 数据库填充多个列表
- angular - Firebase 单独的 firebase.json 文件用于测试和生产 - 使用 Angular 环境文件变量?
- asp.net-core - 表单在 chrome 中提交,但不在任何其他浏览器上
- excel - 用户表单检查日期和时间
- java - 如何从核心java tcp中的客户端输出流调用服务器端类方法
- javascript - Mongoose MongoNetworkError // 连接错误
- sockets - 使用 lNet 通过套接字发送消息
- html - 对属于同一文档的资源使用链接预取是否很好?