discord.py机器人重启后如何实现历史事件日志记录?
Discord机器人日志系统历史事件记录问题
我正在为Discord机器人开发日志系统,当前系统仅能记录机器人启动后的事件,若机器人重启,重启前的历史消息与事件无法被记录,这是核心问题。现寻求解决方法,使机器人重启后仍能处理历史事件的日志记录。
以下是日志发送的完整代码:
@bot.event async def on_member_remove(member): with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(member.guild.id) in data: logera = data[str(member.guild.id)]['log_leavelogs'] if logera == 0: with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(member.guild.id) in data: isenabled = data[str(member.guild.id)]['logchlID'] if isenabled == 0: return else: channelrs = bot.get_channel(data[str(member.guild.id)]['logchlID']) embed = discord.Embed(title=f"Member Left", color=discord.Colour.red()) embed.set_footer(text=f"User ID: {member.id}") embed.set_author(name=f"{member.display_name} (@{member.name})", icon_url=member.avatar) await channelrs.send(embed=embed) @bot.event async def on_member_join(member): with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(member.guild.id) in data: logera = data[str(member.guild.id)]['log_joinlogs'] if logera == 0: with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(member.guild.id) in data: isenabled = data[str(member.guild.id)]['logchlID'] if isenabled == 0: return else: creation = member.created_at.strftime("%a %#d %B %Y, %I:%M %p") channelrs = bot.get_channel(data[str(member.guild.id)]['logchlID']) embed = discord.Embed(title=f"Member Joined", color=discord.Colour.green()) embed.add_field(name="Account Creation Date", value=f"{creation}") embed.set_footer(text=f"User ID: {member.id}") embed.set_author(name=f"{member.display_name} (@{member.name})", icon_url=member.avatar) await channelrs.send(embed=embed) else: return @bot.event async def on_member_ban(guild, user): async for entry in guild.audit_logs(limit=1,action=discord.AuditLogAction.ban): with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(user.guild.id) in data: logera = data[str(guild.id)]['log_banlogs'] if logera == 0: with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(guild.id) in data: isenabled = data[str(user.guild.id)]['logchlID'] if isenabled == 0: return else: channelrs = bot.get_channel(data[str(guild.id)]['logchlID']) embed = discord.Embed(title=f"Member Banned", description=f"", color=discord.Colour.red()) embed.add_field(name="Banned by", value=f"{entry.user.mention}") embed.add_field(name="Reason", value=f"{entry.reason}") embed.set_author(name=f"{entry.target.display_name} (@{entry.target})", icon_url=user.avatar) embed.set_thumbnail(url=user.avatar) await channelrs.send(embed=embed) @bot.event async def on_message_edit(message_before, message_after): with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(message_before.guild.id) in data: if message_before.content == message_after.content: return else: logera = data[str(message_before.guild.id)]['log_editedmsglogs'] if logera == 0: with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(message_before.guild.id) in data: isenabled = data[str(message_before.guild.id)]['logchlID'] if isenabled == 0: return else: if not message_before.content == "": channelrs = bot.get_channel(data[str(message_before.guild.id)]['logchlID']) embed = discord.Embed(title=f"Message by @{message_before.author.name} edited in {message_before.channel.mention}", description=f"**Before**\n{message_before.content}\n**After**\n{message_after.content}", color=discord.Colour.blue()) embed.set_author(name=f"{message_before.author.display_name} (@{message_before.author.name})", icon_url=message_before.author.avatar) embed.add_field(name="Jump to Message", value=f"[Click here to jump to message]({message_before.jump_url})") embed.set_thumbnail(url=message_before.author.avatar) await channelrs.send(embed=embed) else: return @bot.event async def on_message_delete(message): async for entry in message.guild.audit_logs(limit=1,action=discord.AuditLogAction.message_delete): deleter = entry.user with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(message.guild.id) in data: logera = data[str(message.guild.id)]['log_deletemsglogs'] if logera == 0: with open("database\database_main\serverdb.json", encoding="utf-8") as f: data = json.load(f) if str(message.guild.id) in data: isenabled = data[str(message.guild.id)]['logchlID'] if isenabled == 0: return else: if not message.content == "": channelrs = bot.get_channel(data[str(message.guild.id)]['logchlID']) embed = discord.Embed(title=f"Message by @{message.author.name} deleted in {message.channel.mention}", description=f"**Message Contents**\n{message.content}", color=discord.Colour.red()) embed.set_author(name=f"{message.author.display_name} (@{message.author.name})", icon_url=message.author.avatar) embed.set_thumbnail(url=message.author.avatar) await channelrs.send(embed=embed) else: return
若需更多信息,我会随时提供。
编辑补充:若无法明确问题,可查看演示视频内容。
内容的提问来源于stack exchange,提问作者As2Bax
相关产品推荐
相关产品推荐

