分配后角色被删除

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.sleeptime.sleep 完全阻止机器人,因为它不是异步的

await bot.add_roles(ctx.message.author, fortniterole)
await asyncio.sleep(2)
await bot.add_roles(ctx.message.author, gotrole)

【讨论】:

以上是关于分配后角色被删除的主要内容,如果未能解决你的问题,请参考以下文章

权限控制:分配权限1

教程创建RBAC角色组并分配权限后,EMC中本应有权限编辑的字段被锁定

分配/删除不和谐角色

会计科目分配后如何取消?

项目一众筹网06_02给用户分配角色执行用户角色的分配提交的 只是我们选中的解决隐藏域的东西,不用传,点击submit的时候就会传过去允许参数是空值mybatis删除和插入数据

在 C++ 中删除其类的实例后,分配给 cpp 中定义的全局静态变量的内存是不是被释放?