这是我的代码
@commands.Cog.listener()
async def on_member_ban(self, guild, user: discord.User):
db = sqlite3.connect("./data/modlog.db")
cursor = db.cursor()
cursor.execute(
f"SELECT channel_id FROM auditlog WHERE guild_id = {guild.id}"
)
result = cursor.fetchone()
if result is None:
return
else:
embed = discord.Embed(title=f"Member Banning Case", colour=discord.Colour.red())
embed.add_field(name="Member Name", value=user.name)
embed.add_field(name="Reason", value=user.)
embed.set_footer(text=f"User ID: {user.id}")
embed.timestamp = datetime.datetime.utcnow()
channel = self.client.get_channel(id=int(result[0]))
await channel.send(embed=embed)
我希望我的机器人得到禁止的原因,有可能这样做吗?
答案 0 :(得分:1)
从服务器禁止用户时,可以提供原因。也可以是空的。
https://discordpy.readthedocs.io/en/latest/api.html?highlight=on_member_ban#discord.Guild.ban
on_member_ban()
:
https://discordpy.readthedocs.io/en/latest/api.html?highlight=on_member_ban#discord.on_member_ban
这样,您将获得guild
和user
对象。
仅在审核日志中说明了禁令的原因。您可以搜索审核日志。 https://discordpy.readthedocs.io/en/latest/api.html?highlight=on_member_ban#discord.AsyncIterator.find
def predicate(event):
return event.reason is not None
event = await guild.audit_logs().find(predicate)
仅是示例。这将返回有原因的最后一个事件。这可以是任何事件(用户取消禁止,用户禁止,消息删除等)
event
变量是此类的实例:https://discordpy.readthedocs.io/en/latest/api.html?highlight=on_member_ban#discord.AuditLogEntry
通过Guild.audit_logs()
检索的:https://discordpy.readthedocs.io/en/latest/api.html?highlight=on_member_ban#discord.Guild.audit_logs
您必须将predicate
方法调整为类似以下内容:
def predicate(event):
return event.action is discord.AuditLogAction.ban
一旦事件对象带有用户禁令,您就可以使用event.reason
提取禁令原因。
(注意:我没有对此进行测试。我猜是根据文档编写的。)
您必须自己进行实际的编程和测试。我为您提供了一些指导,您需要查找和使用哪些方法。