You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:17:07