分配后角色被删除
Posted
技术标签:
【中文标题】分配后角色被删除【英文标题】:Role gets removed after assigning 【发布时间】:2018-11-25 09:51:04 【问题描述】:所以我有一个基于 Discord.py 编写的机器人, 我遇到了一个非常奇怪的问题,我的机器人托管在 CentOs 6、64 位上,并安装了 python 3.6.3。 我通过将机器人cd'ing到主文件夹并使用python3.6 main.py来启动机器人。 看这段代码sn-p:
@bot.command(aliases=["pokemon", "Pokemon", "POKEMON", "PoGo", "POGO", "PokeMonGo", "Pokémon GO"], pass_context=True)
async def pokemongo(ctx):
gotrole = discord.utils.get(ctx.message.server.roles, name="1")
pogorole = discord.utils.get(ctx.message.server.roles, name="Pokémon GO")
if gotrole in ctx.message.author.roles:
await bot.say("You already have a role! Contact support if you want to change!")
return
else:
await bot.add_roles(ctx.message.author, pogorole)
time.sleep(2)
await bot.add_roles(ctx.message.author, gotrole)
await bot.say("Got you the role, Pokémon GO!")
这应该完全可行,发生的情况是用户获得角色 Pokemon GO,然后获得角色 1,然后奇怪的是,角色 Pokemon GO 被删除,有时会发生,有时不会发生,什么都没有与角色、权限、代码之间或下面有关。这个 sn-p 也用于各种其他角色,使用相同的模板,只是命令名称(async def)和角色变量(本例中为 pogorole)不同
奇怪的部分是完全随机的,实际上是由机器人完成的,而不是其他人,请参阅下面的导入库
import discord
from discord.ext import commands
from discord.utils import get
import os
import random
import sys
import asyncio
import aiohttp
import time
import psutil
还有另一个sn-p代码示例,使用相同的模板:
@bot.command(pass_context=True)
async def fortnite(ctx):
gotrole = discord.utils.get(ctx.message.server.roles, name="1")
fortniterole = discord.utils.get(ctx.message.server.roles, name="Fortnite")
if gotrole in ctx.message.author.roles:
await bot.say("You already have a role! Contact support if you want to change!")
return
else:
await bot.add_roles(ctx.message.author, fortniterole)
time.sleep(2)
await bot.add_roles(ctx.message.author, gotrole)
await bot.say("Got you the role, fortnite!")
它不会出错,角色 1 不会改变或从用户中删除,它只是随机发生的游戏角色,它与互联网或类似的东西没有任何关系 我真的希望对此有一个解释,并且真的很想听听一些!
干杯,致命
【问题讨论】:
您的机器人中是否有删除角色的代码?您是否在运行机器人的终端中看到任何错误?您如何确定用户正在失去角色? 很明显,就像我说的那样,它不会出错,也没有删除角色的命令,我使用 Discord Audit Log 和 Dyno 说明了这一点 【参考方案1】:尝试一次添加所有角色。
await bot.add_roles(ctx.message.author, fortniterole, gotrole)
或者尝试使用asyncio.sleep
而不是time.sleep
。 time.sleep
完全阻止机器人,因为它不是异步的
await bot.add_roles(ctx.message.author, fortniterole)
await asyncio.sleep(2)
await bot.add_roles(ctx.message.author, gotrole)
【讨论】:
以上是关于分配后角色被删除的主要内容,如果未能解决你的问题,请参考以下文章
教程创建RBAC角色组并分配权限后,EMC中本应有权限编辑的字段被锁定
项目一众筹网06_02给用户分配角色执行用户角色的分配提交的 只是我们选中的解决隐藏域的东西,不用传,点击submit的时候就会传过去允许参数是空值mybatis删除和插入数据