https://www.bilibili.com/opus/941729141064990755
准备
使用软件:Discord Chat Exporter
最新版下载地址:https://github.com/Tyrrrz/DiscordChatExporter/releases/
一般情况下是下载“DiscordChatExporter.win-x64.zip”这个文件,其他系统或平台下载的文件版本可参考README文档的Download部分。
cut-off
导出步骤(以目前最新的2.43.3版本为例)
1. 打开DiscordChatExporter.exe。
可以看到导出的步骤已经写在软件界面了,所以本文相当于是翻译并且复述一下(
2. 在网页端的Discord登录,网址:https://discord.com/channels/@me
3. 打开你需要保存聊天记录的频道。
4. 按Ctrl+Shift+I键打开开发者工具(图中以Chrome浏览器为例)。
5. 切换到“网页(Network)”标签。
6. 按Ctrl+R重新加载页面。
7. 在任意几个频道间来回切换一下,以触发网页请求。
8. 在搜索框输入“message”。
9. 点击任意一个message条目,并在右侧窗口中切换到“标头(Header)”标签。
10. 往下翻到“请求标头(Request Headers)”。
11. 复制Authorization字段的值。
12. 把复制的值粘贴到Discord Chat Exporter上的Token输入框,点击右侧箭头,等待一会之后就会显示你加入的所有服务器和包含的频道。选中你要导出聊天记录的频道,点击右下角的下载按钮。
13. 之后可以设置保存路径(Output path)、保存格式(包括.txt和.html等),按"MORE"可以设置聊天记录时段、筛选消息类型等。最后按“EXPORT(导出)”,等待一段时间,即可导出聊天记录。之后也可以继续导出其他频道的聊天记录。
(注:进入软件右上角的“Settings(设置)”,可以设置是否显示频道帖子(thread)以及消息时间戳的时区等。)
参考此教程 以TXT格式导出
运行以下Python代码
import re
import random
import os
import tkinter as tk
from tkinter import filedialog
from datetime import datetime, timedelta
def generate_user_ids(folder_path):
user_ids = {}
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
input_file_path = os.path.join(folder_path, filename)
with open(input_file_path, 'r', encoding='utf-8') as infile:
lines = infile.readlines()
for line in lines:
match = re.match(r'\[(.*?)\] (.*?)\n', line)
if match:
_, username = match.groups()
if username not in user_ids:
user_ids[username] = random.randint(
100000000, 999999999)
return user_ids
def convert_format_in_folder(folder_path):
output_folder = os.path.join(folder_path, 'converted_files')
os.makedirs(output_folder, exist_ok=True)
user_ids = generate_user_ids(folder_path)
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
input_file_path = os.path.join(folder_path, filename)
output_file_path = os.path.join(output_folder, filename)
convert_format(input_file_path, output_file_path, user_ids)
def convert_format(input_file, output_file, user_ids):
second_counter = 0 # 初始化秒计数器
with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile:
lines = infile.readlines()
for line in lines:
match = re.match(r'\[(.*?)\] (.*?)\n', line)
if match:
timestamp, username = match.groups()
user_id = user_ids.get(username)
# 解析原始时间戳
try:
time_obj = datetime.strptime(timestamp, '%Y/%m/%d %H:%M')
except ValueError:
# 如果时间格式不匹配,跳过此行
outfile.write(line)
continue
# 增加秒数
time_obj += timedelta(seconds=second_counter)
second_counter += 1 # 递增秒计数器
new_timestamp = time_obj.strftime('%Y/%m/%d %H:%M:%S')
new_format = f"{username}({user_id}) {new_timestamp}\n"
outfile.write(new_format)
else:
outfile.write(line)
def main():
root = tk.Tk()
root.withdraw()
folder_selected = filedialog.askdirectory(title="选择要转换的文件夹")
if folder_selected:
convert_format_in_folder(folder_selected)
print(f"转换完成!转换后的文件保存在:{os.path.join(
folder_selected, 'converted_files')}")
if __name__ == "__main__":
main()
运行程序后,按照以下步骤操作:
程序启动后会弹出一个对话框,选择包含待转换TXT文件的文件夹;程序会自动遍历该文件夹中的所有TXT文件,进行格式转换;转换后的文件将保存在所选文件夹内新创建的 converted_files 文件夹中。
移除转换后文件内容前后以=====分隔的内容,使用海豹染色器染色即可
https://log.weizaima.com/