したいこと
discord.py で処罰(?)機能を作っています。
コマンドで指定したユーザーをKickやBANするところまではできたのですが、一定時間(数日)経った後にBANを解除などしたいです。
asyncio.sleepを使うと途中でリセットされてしまいそうなのでBANされた時の時間と比較して解除しようと思っています。
ただその比較がわかりません。
該当のソースコード
python
1import discord 2import datetime 3 4@client.event 5async def on_message(message): 6 if message.content.startswith('/ban'): 7 args = message.content.split() 8 roles = [message.guild.get_role(owner), message.guild.get_role(subowner), 9message.guild.get_role(botr),message.guild.get_role(admin)] 10 name = discord.utils.find(lambda m: args[1] in m.name, message.guild.members) 11 if [role for role in message.author.roles if role in roles]: 12 category = ID 13 if message.channel.category.id == category: 14 if len(args) != 3: 15 return await message.channel.send('usage: /ban <name> <reason>') 16 else: 17 if name: 18 reason = args[2] 19 await name.ban(reason=reason) 20 await message.channel.send("[ " + name.mention + " ]をサーバーからBANしました。") 21 dt = datetime.datetime.now() 22 dtnow = dt.strftime("%Y/%m/%d/%H:%M:%S") 23 embed=discord.Embed(title="BAN completed.", color=0xff2b30) 24 embed.add_field(name="実行日時:", value=dtnow, inline=False) 25 embed.add_field(name="実行者:", value=message.author.display_name, inline=False) 26 embed.add_field(name="理由:", value=reason, inline=False) 27 embed.add_field(name="対象:", value=name.display_name, inline=True) 28 channel = client.get_channel(ID) 29 await channel.send(embed=embed) 30 else: 31 return await message.channel.send("[ " + args[1] + " ] was not found.") 32 else: 33 await message.channel.send("そのコマンドは " + message.channel.mention + " では使用できません。") 34 else: 35 await message.channel.send("You not have admin permission.") 36 37client.run('*************************')
現状がこんな感じです。手動でBANして手動でUnBANしています。Kickも同様です。
手動では問題なく動作しています。
試したこと
Youtubeなどで調べましたが、見つかりませんでした。
補足情報
Python3.8.3
エディタVSCode 使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/31 09:02
2020/05/31 10:05