Created
August 4, 2022 05:41
-
-
Save zuzu/2e87923f88f3d9b6d21e987e37eda492 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/**** | |
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