我无法使用 Telegram 保存聊天记录。据我所知,Android、Mac OS X、Windows 和 Linux 上的 Telegram 不向用户提供此选项。这是一项基本功能,这款软件没有它,令人失望和惊讶。
有针对此功能的要求这里。
也许有一个解决方法,因为当您向后滚动时,所有历史记录都会加载到设备上。
是否可以捕获/保存设备中的聊天记录,并在本地备份聊天记录?
答案1
官方数据导出
从 2018 年 6 月 23 日至 24 日,Telegram 添加了此选项,作为 GDPR 变更的一部分。
现在您可以请求下载您的所有数据,这样您就可以获取您的聊天记录。
- Telegram 支持数据导出:
- Telegram 桌面版 - 来自1.3.8或更高
- Android 版 Telegram - 来自4.8.10或更高
- iOS 版 Telegram - 来自4.8.3或更高
- Telegram Webapp-尚未推出
- Windows Phone 版 Telegram - 不知道
您可以留言@GDPRbot请求导出您的数据,或者从应用程序设置(如果已可用)中导出。
注意:出于安全原因,数据导出不是立即的,因此如果有人控制了您的某个设备,他们将无法立即下载您的所有数据。
Telegram 桌面端演示
其他选项(来自 GitHub)
答案2
tg (telegram-cli) 接受 Lua 脚本。这是我的脚本,它将任意数量的消息保存到 sqlite 数据库中。
答案3
我根据@Samim 的脚本创建了自己的脚本要旨。
它会打印到文件中,这样您就可以根据需要保存它,而不是使用 SQL 数据库。此外,它还具有睡眠功能,这样您就可以保存更多对话的历史记录。它仍然受到telegram-cli
100 个硬限制的限制。我通过编辑源代码并提高限制来改变这一点。
答案4
我找到了一个可以在 telegram-cli 上运行的漂亮的 php 库https://github.com/zyberspace/php-telegram-cli-client
有一个脚本可以下载所有消息和文件。
<?php
require('vendor/autoload.php');
$telegram = new \Zyberspace\Telegram\Cli\Client('unix:///tmp/tg.sck');
$chat = 'chat_name_that_you_want_to_download';
$limit = 50;
$offset = 0;
function save($msg)
{
$path = '/path/where/you/want/to/store/messages';
file_put_contents($path . '/' . $msg->id, json_encode($msg));
}
function download($telegram, $msg)
{
$response = $telegram->exec('load_' . $msg->media->type, $msg->id);
$msg->media->path = $response->result;
}
while($msgList = $telegram->getHistory($chat, $limit, $offset)) {
$offset += $limit;
foreach($msgList as $msg) {
if (isset($msg->media)) {
download($telegram, $msg, $msg->media->type);
}
save($msg);
}
}
您必须在此处更改两个字符串:
- 您想要下载的聊天名称
您想要存储消息的路径
- 脚本将把每条消息(来自聊天“chat_name_that_you_want_to_download”)作为单独的文件保存在文件夹“/path/where/you/want/to/store/messages”中。
- 每个文件都包含消息的 json 表示。
- 对于文件,将有“media->path”表示下载文件的路径。
- 文件将存储在 telegram-cli 默认文件夹中:~/telegram-cli/downloads