python-3.x - 为什么 discord.py 中的 add_roles() 方法在这里失败?
问题描述
以下方法在来自烧瓶应用程序的不和谐机器人线程上调用。所有打印检查都显示正确的数据,因此该方法正在成功运行,但是最终的 fstring
f'{role} added to {member}'
不会输出到控制台,这让我觉得
await member.add_roles(role)
没有正确执行。控制台中没有显示错误。其他每一行似乎都运行正常。我已经包含了下面的相关方法,包括烧瓶应用程序中线程的结构方式
client_loop = asyncio.get_event_loop()
intents = discord.Intents(messages=True, guilds=True, members=True)
client = commands.Bot(command_prefix='$', help_command=None, intents = intents)
@client.event
async def on_ready():
print(f'{client.user} is online!')
return
async def start_bot():
print(os.getenv("TOKEN"))
await client.start(os.getenv("TOKEN"))
def run_it_forever(loop):
loop.run_forever()
async def api_add_role(user, role_to_assign):
guild = client.guilds[0]
members = await guild.fetch_members(limit=None).flatten()
role = discord.utils.get(guild.roles, name=role_to_assign)
print("role")
print(role)
member = [m for m in members if m.name == user][0]
print("member")
print(member)
await member.add_roles(role)
print(f'{role} added to {member}')
app = Flask(__name__)
@app.route("/add_role")
def add_role_to_member():
name = request.args.get('name')
role = request.args.get('role')
coroutine = asyncio.run_coroutine_threadsafe(api_add_role(name, role), client_loop)
return "okay"
if __name__ == '__main__':
asyncio.get_child_watcher()
client_loop.create_task(start_bot())
botThread = threading.Thread(target=run_it_forever, args=(client_loop,))
def interrupt():
global botThread
botThread.join()
atexit.register(interrupt)
botThread.start()
print("server starting....")
app.run(host='0.0.0.0', port=5000)
解决方案
我还没有看到有人使用你的方法来获取成员对象。有get_member_named
什么是为此而生的。
async def api_add_role(user, role_to_assign):
guild = client.guilds[0]
role = discord.utils.get(guild.roles, name=role_to_assign)
print(f"role: {role}")
member = guild.get_member_named(user) # name or name#tag
print(f"Member: {member}")
if member and role: # if both exist
await member.add_roles(role)
print(f'{role.name} added to {member.name}')
推荐阅读
- sql - 选择一个数字列作为字符串
- certificate - 我在文本文件中有私钥。如何生成 .pem 文件或 .cer 文件
- flutter - 从无状态小部件调用有状态小部件的 setState
- r - 在R中,我如何制作一个变量并列直方图的X轴
- docker - 用于远程访问的 Docker 网络主机命令
- javascript - 使用 django 反应 redux 身份验证不起作用
- bot-framework-composer - 在 Bot Framework Composer 中更改语言
- excel - 我想在这段代码中添加公式 INDIRECT
- javascript - Javascript代码获取表格主体的最后一行并在该行被删除后隐藏表格
- angularjs - ng-repeat 如何使用带有 2 个参数的 filetr