Skip to content

Instantly share code, notes, and snippets.

@zuzu
Created August 4, 2022 05:41
Show Gist options
  • Save zuzu/2e87923f88f3d9b6d21e987e37eda492 to your computer and use it in GitHub Desktop.
Save zuzu/2e87923f88f3d9b6d21e987e37eda492 to your computer and use it in GitHub Desktop.
/****
ChatWorkルーム単位のチャットバックアップ用スクリプト
テキストファイルで諸々良い感じに成形してバックアップ出来ます。
使い方: 1.読み込みたい部屋を開く。2.読み込みたい範囲までスクロールして読み込む。3.Chromeの開発者ツールのConsoleに貼り付けて実行
注意:直接HTML書き換えているので終わった後はページ更新をおすすめします。
****/
function timeConvert(timestamp) {
var a = new Date(timestamp * 1000);
var year = a.getFullYear();
var month = a.getMonth() + 1;
var date = a.getDate()
var hour = a.getHours().toString().padStart(2, '0')
var min = a.getMinutes().toString().padStart(2, '0')
var time = `${year}年${month}月${date}日 ${hour}:${min}`
return time;
}
var messages = '';
$('._message').each((idx, item) => {
// 引用を[qt][/qt]で囲む
$(item).find('pre > div.chatQuote').before("<span>\n[qt: </span>")
$(item).find('pre > div.chatQuote').after("<span>[/qt]\n</span>")
$(item).find('pre div.quoteText').before("\n")
$(item).find('pre div.quoteText').after("\n")
$(item).find('pre div.quoteTimeStamp ').before(" ")
$(item).find('pre div.quoteTimeStamp ').after("]")
$(item).find('pre div.quoteText avatarClickTip').after(" ")
// infoを[info][/info]で囲む
$(item).find('pre > div.chatInfo').before("<span>\n[info]</span>")
$(item).find('pre > div.chatInfo').after("<span>[/info]\n</span>")
$(item).find('pre div.chatInfo').before("\n")
$(item).find('pre div.chatInfo').after("\n")
// codeを[code][/code]で囲む
$(item).find('pre > code').before("[code]")
$(item).find('pre > code').after("[/code]")
$(item).find('pre > code').before("\n")
$(item).find('pre > code').after("\n")
// "To"を追加
// 社内文化でToの前にccと付けて複数並べるときがあるので、Toの前にスペースを追加
$(item).find('pre div.chatTimeLineTo').before(" To: ")
// ファイルダウンロードリンクがファイル名だけになるので、リンクと分かるように"FileLink:"と追記
$(item).find('pre div[data-cwclose="\[/download\]"]').before("FileLink: ")
// そのままだと返信元○○と表記されるので、"RE: "を足す
if($(item).find('pre').length){
var replace_txt = $(item).find('pre').html();
$(item).find('pre').html(
replace_txt.replace(/>返信元<\/p>/g,'>RE: </p>')
);
}
var field = '------------------' + "\n"
if ($(item).find('._timeStamp').length > 0) {
field += timeConvert($(item).find('._timeStamp').data('tm')) + "\n"
} else {
return;
}
if ($(item).find('.timelineMessage__orgName').length > 0) {
field += $(item).find('.timelineMessage__orgName').text() + "\n"
}
if ($(item).find('._speakerName').length > 0) {
field += $(item).find('._speakerName').text() + "\n"
} else {
field += $('._message').eq(idx - 1).find('._speakerName').text() + "\n"
}
// メッセージが削除されると本文のpreがないパターンがある
if($(item).find('pre').length){
field += $(item).find('pre').text() + "\n\n"
}else if($(item).find('div._delete').length){// 削除時は削除用の要素を確認して削除した旨のメッセージを入れる
field += "[dtext:chat_deleted]メッセージは削除されました。\n\n"
}
messages += field
})
// ファイル名用日時生成
var m = new Date();
var dateString =
m.getUTCFullYear() + "" +
("0" + (m.getMonth()+1)).slice(-2) + "" +
("0" + m.getDate()).slice(-2) + "_" +
("0" + m.getHours()).slice(-2) + "" +
("0" + m.getMinutes()).slice(-2) + "" +
("0" + m.getSeconds()).slice(-2);
//ファイル出力
const blob =new Blob([messages],{type:"text/plain"});
const link =document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download =dateString+"_backup.txt";
link.click();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment