当前位置: 首页 > news >正文

telegram-history-dump开发者指南:自定义格式化器实现教程

telegram-history-dump开发者指南:自定义格式化器实现教程

【免费下载链接】telegram-history-dumpBackup Telegram chat logs using telegram-cli项目地址: https://gitcode.com/gh_mirrors/te/telegram-history-dump

telegram-history-dump是一款基于telegram-cli的聊天记录备份工具,它允许用户将Telegram聊天记录导出为多种格式。本教程将详细介绍如何为该工具创建自定义格式化器,让你能够按照自己的需求定制聊天记录的输出样式。

为什么需要自定义格式化器?

默认情况下,telegram-history-dump提供了多种格式化器,包括HTML、纯文本、PISG等。但有时你可能需要特定格式的输出,比如Markdown、CSV或者其他自定义格式。这时,创建自己的格式化器就显得尤为重要。

格式化器基础

在开始编写自定义格式化器之前,让我们先了解一下格式化器的基本结构。所有格式化器都继承自FormatterBase类,该类定义了格式化器的基本接口。

FormatterBase类

FormatterBase类位于formatters/lib/formatter_base.rb文件中,它提供了以下核心方法:

  • start_backup(dialogs): 在开始备份前调用,可用于初始化操作
  • format_dialog(dialog, messages): 格式化单个对话,必须实现
  • end_backup(): 在备份完成后调用,可用于清理或最终处理

创建自定义格式化器的步骤

步骤1:创建格式化器文件

首先,在formatters目录下创建一个新的Ruby文件。文件名应该与你的格式化器名称相对应,例如markdown.rb

步骤2:继承FormatterBase

在新创建的文件中,需要引入FormatterBase并创建一个继承自它的类。类名应该采用驼峰式命名,例如MarkdownFormatter

require_relative 'lib/formatter_base' class MarkdownFormatter < FormatterBase # 你的代码将在这里 end

步骤3:设置格式化器名称

每个格式化器都需要一个唯一的名称,这通过设置NAME常量来实现:

NAME = 'markdown'

步骤4:实现必要的方法

至少需要实现format_dialog方法,该方法负责处理单个对话的格式化。你也可以选择性地实现start_backupend_backup方法。

start_backup方法

start_backup方法在开始处理所有对话前被调用,可以用来进行一些初始化工作,比如创建输出目录:

def start_backup(dialogs) FileUtils.mkdir_p(output_dir) end
format_dialog方法

format_dialog方法是格式化器的核心,它接收对话信息和消息列表作为参数:

def format_dialog(dialog, messages) # 处理对话和消息的代码 end
end_backup方法

end_backup方法在所有对话处理完成后被调用,可以用来进行最终的清理或汇总工作:

def end_backup $log.info('Markdown export finished, see: output/formatted/markdown') end

访问对话和消息数据

format_dialog方法中,你可以访问dialogmessages对象来获取对话和消息数据。

dialog对象

dialog对象包含对话的基本信息,如:

  • print_name: 对话名称
  • title: 对话标题
  • type: 对话类型(用户、群组等)

messages对象

messages是一个包含所有消息的数组,每个消息是一个哈希,包含:

  • text: 消息文本
  • date: 消息时间戳
  • out: 是否为发送的消息
  • from: 发送者信息
  • media: 媒体信息(如果有)

输出目录

格式化器应该将输出文件保存到output_dir目录中,这个目录可以通过output_dir方法获取:

def format_dialog(dialog, messages) filename = File.join(output_dir, "#{get_safe_name(dialog['print_name'])}.md") File.open(filename, 'w:UTF-8') do |file| # 写入格式化内容 end end

配置格式化器

要使用你的自定义格式化器,需要在config.yaml文件中添加相应的配置:

formatters: markdown: # 格式化器选项

示例:简单的Markdown格式化器

下面是一个简单的Markdown格式化器示例,它将对话导出为Markdown格式的文件:

require_relative 'lib/formatter_base' require 'cgi' class MarkdownFormatter < FormatterBase NAME = 'markdown' def start_backup(dialogs) FileUtils.remove_dir(output_dir, true) FileUtils.mkdir_p(output_dir) end def format_dialog(dialog, messages) safe_name = get_safe_name(dialog['print_name']) filename = File.join(output_dir, "#{safe_name}.md") File.open(filename, 'w:UTF-8') do |file| # 写入对话标题 if dialog['type'] != 'user' file.puts "# Group chat: #{CGI::escapeHTML(dialog['title'])}" else file.puts "# Chat with #{CGI::escapeHTML(dialog['print_name'])}" end file.puts "---\n" # 写入消息 messages.reverse_each do |msg| next unless msg['text'] date = Time.at(msg['date']).strftime('%Y-%m-%d %H:%M') author = msg['out'] ? 'You' : get_full_name(msg['from']) file.puts "**#{author}** [#{date}]: #{CGI::escapeHTML(msg['text'])}" file.puts end end end def end_backup $log.info('Markdown export finished, see: output/formatted/markdown') end end

测试自定义格式化器

要测试你的自定义格式化器,只需在运行telegram-history-dump时指定它:

git clone https://gitcode.com/gh_mirrors/te/telegram-history-dump cd telegram-history-dump ruby telegram-history-dump.rb --format markdown

总结

创建自定义格式化器是扩展telegram-history-dump功能的强大方式。通过继承FormatterBase类并实现必要的方法,你可以将Telegram聊天记录导出为任何你需要的格式。无论是简单的文本格式还是复杂的HTML报告,自定义格式化器都能满足你的需求。

希望本教程能帮助你开始创建自己的格式化器。如果你有任何问题或需要进一步的帮助,请参考项目中的示例格式化器,如formatters/html.rb和formatters/plaintext.rb。

【免费下载链接】telegram-history-dumpBackup Telegram chat logs using telegram-cli项目地址: https://gitcode.com/gh_mirrors/te/telegram-history-dump

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1362376/

相关文章:

  • 2026初创者不熟悉天津本土财税政策怎么办?2026年天津本地方案选择参考 - 各行各业Ethan说
  • 从零部署AI角色生成项目:基于Stable Diffusion的本地化实践指南
  • 如何用AWS Bookstore Demo App构建高效在线书店:5分钟快速启动教程
  • Unity性能优化:DOTween Pro动画GC问题深度解析与实战解决方案
  • ArcGIS Pro与InVEST模型实战:生态安全格局构建全流程解析
  • 交通量调查系统厂家推荐,广州聚杰,支持定制化监测解决方案 - 品牌速递
  • PTA基础编程题目集 7-24约分最简分式(C++语言实现)
  • 2026年北京故意损毁财物罪辩护律师**单:资深刑事律师团队,专业策略与实战经验深度解析 - 优企名品
  • Go 并发编程与高性能网络服务开发:流量上来前要补哪些防线
  • 网络环路与广播风暴:从交换机原理到STP防环实战
  • TCP三次握手原理深度解析:从网络不可靠性到可靠连接建立
  • 建设旅游服务类网站的可行性报告深度解析与未来趋势洞察
  • 绝区零自动化工具完整指南:5分钟快速掌握游戏解放方案
  • flutter_login_signup完全解析:如何用Flutter快速构建精美登录注册界面
  • EFCore.Visualizer完全指南:从安装到高级查询分析的终极教程
  • 电动车带电池怎么托运最便宜?2026年完整避坑指南+省钱攻略 - 快递物流资讯
  • 2026昆明GEO/SEO优化公司大盘点 正规合规服务商选型攻略+签约避坑全指南 - U渠道
  • 2026年物流比价平台哪个最便宜?一文讲透计费规则与省钱技巧 - 快递物流资讯
  • 从Blender建模到CIMPro发布:学校数字孪生实战全流程解析
  • AI音色转换实战:从《虫儿飞》到赛博合成的完整技术流程
  • 3步快速部署:Dreame扫地机器人的智能家居革命
  • 网络环路与广播风暴:从原理到实战,STP协议如何守护网络稳定
  • AI生成专业分析图:精准提示词工程全攻略
  • Qwen3-VL-8B-Instruct-w8a8-llmcompressor-v0.12.0背后的技术:LLM Compressor如何实现40%模型压缩
  • TCP三次握手原理深度解析:从协议到内核实现与工程实践
  • 生态安全格局分析实战:ArcGIS Pro、InVEST与Python自动化工作流搭建
  • 抖音去水印方法详解:合规操作、**保存与工具选择全攻略 - 耶斯去水印
  • 2026年大连全屋整装**单:一站式美学与匠心工艺深度解析,避坑指南口碑优选 - 优企名品
  • Juicy Breakout音效设计:如何用15种碰撞声效提升游戏沉浸感
  • FlowLong高级特性:并行会签、票签与超时审批功能详解