所以我有一个机器人,基于Discord.py编写, 我遇到了一个非常奇怪的问题,我的机器人托管在CentOs 6,64位,并安装了python 3.6.3。 我通过cd到主文件夹启动机器人并使用python3.6 main.py. 请参阅此代码段:
@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被删除,有时它确实发生了,有时候它没有,而且它什么也没有与角色,权限,代码之间或之下的代码有关。此片段也用于其他各种角色,使用相同的模板,只是命令名称(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
另一个代码片段的另一个示例,使用相同的模板:
@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不会改变或从用户中移除,它只是随机做的游戏角色,它与互联网或类似的东西没有任何关系 我真的希望有一个解释,并且真的很想听到一些!
干杯,致命
答案 0 :(得分:0)
尝试一次添加所有角色。
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)