Python 3.x 如何";“临时禁令”;不和谐的人?
我正在用discord.py制作一个管理discord机器人,所以我意识到我需要添加一个命令来临时禁止某人一段时间,这个禁止可以通过角色或将成员踢出频道然后禁止他,但我不知道如何做。有人能帮我吗 这取决于你所说的“临时禁令”是什么意思 您希望该用户在一定时间内被逐出服务器并被禁止,还是希望该用户暂时被限制某些权限,例如聊天 我建议使用后者,并使用新的和改进的API 通过角色分配和x秒后不限制成员:Python 3.x 如何";“临时禁令”;不和谐的人?,python-3.x,scheduled-tasks,discord,python-asyncio,discord.py,Python 3.x,Scheduled Tasks,Discord,Python Asyncio,Discord.py,我正在用discord.py制作一个管理discord机器人,所以我意识到我需要添加一个命令来临时禁止某人一段时间,这个禁止可以通过角色或将成员踢出频道然后禁止他,但我不知道如何做。有人能帮我吗 这取决于你所说的“临时禁令”是什么意思 您希望该用户在一定时间内被逐出服务器并被禁止,还是希望该用户暂时被限制某些权限,例如聊天 我建议使用后者,并使用新的和改进的API 通过角色分配和x秒后不限制成员: @bot.command() 异步定义限制(ctx,成员:discord.member,持续时间:
@bot.command()
异步定义限制(ctx,成员:discord.member,持续时间:int):
role=discord.utils.get(ctx.guild.roles,name=“Restricted”)
等待成员。添加_角色(角色)
等待异步睡眠(持续时间)
等待成员。删除_角色(角色)
禁止用户并在x秒后取消禁止:
@bot.command()
异步定义禁止(ctx,用户:discord.user,持续时间:int):
等待ctx.guild.ban(用户)
等待异步睡眠(持续时间)
等待ctx.guild.unban(用户)
记住,如果你的BOT崩溃或离线,无论是什么原因,当它在睡眠过程中解禁用户时,BOT将不会取消用户在它备份后,所以要考虑使用的东西可能是一个数据库,并存储禁令的结束时间。然后,您可以在bot启动期间查询所有保存的日期,以计算睡眠时间。此外,你还必须获得他们的用户对象而不是成员对象,因为他们不再是公会的一部分。
经过多次尝试和错误,我终于获得了它!给定的bellow是一个discord.py bot,带有临时禁止用户的命令,可用于多个用户ban_list = []
day_list = []
server_list = []
#This is a background process
async def countdown():
await client.wait_until_ready()
while not client.is_closed:
await asyncio.sleep(1)
day_list[:] = [x - 1 for x in day_list]
for day in day_list:
if day <= 0:
try:
await client.unban(server_list[day_list.index(day)], ban_list[day_list.index(day)])
except:
print('Error! User already unbanned!')
del ban_list[day_list.index(day)]
del server_list[day_list.index(day)]
del day_list[day_list.index(day)]
#Command starts here
@client.command(pass_context = True)
async def ban(ctx,member:discord.Member, days = 1):
if str(ctx.message.author.id) == '<You ID goes here>':
try:
await client.ban(member, delete_message_days=0)
await client.say('User banned for **' + str(days) + ' day(s)**')
ban_list.append(member)
day_list.append(days * 24 * 60 * 60)
server_list.append(ctx.message.server)
except:
await client.say('Error! User not active')
else:
await client.say('You do not have permission to ban users!')
client.loop.create_task(countdown())
ban_list=[]
日期列表=[]
服务器列表=[]
#这是一个后台过程
异步def倒计时():
等待客户端。等待,直到准备就绪()
而不是client.u关闭时:
等待asyncio.sleep(1)
日列表[:]=[x-1表示日列表中的x]
对于每日列表:
如果有一天有一个后台任务的示例代码。也许对你有帮助@Ellisein好的,谢谢问题是,当这个命令运行时,bot将无法执行任何其他操作,如果持续时间超过60秒,bot将崩溃,错误为“任务已销毁,但它处于挂起状态”@Sujit我认为API的重写分支没有这个问题,它使用的是asyncio.sleep()而不是时间。sleep()这样它就不会阻塞任何东西。我只是将持续时间设置为5+分钟,并在运行时使用各种命令,没有任何问题。