Paste from Slack
対応範囲
コピペするとどうしても混入する絵文字やリプライ数などの雑音に阻害されず,メッセージを抽出可能
大量のメッセージも一括で処理
共有機能や,引用部分の内側のコンテンツと外側のコンテンツを区別することはできず,単調な記述になる
写真やファイルなども反映されない
利用方法
このページの一番下のスクリプトを読み込むと,slackロゴマークのボタンが設置される
注意点
コピーするとき,ユーザーのアイコン画像まで含むように選択してください
サンプル
今回作成したツールの出力
Yuki 13:27
Yuki 13:27
Yuki 13:27
>for-debug への投稿 | 昨日の13:27 | メッセージを確認する
出力ここまで
そのままの場合
> bold italic strike link
> bold italic strike link
> for-debug への投稿 | 昨日の13:27 | メッセージを確認する
script.jsimport {channel, thread} from "https://scrapbox.io/api/code/public-minaph/Slack%E3%81%8B%E3%82%89%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%9F%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%91%E3%83%BC%E3%82%B5/pattern.js"
scrapbox.PageMenu.addMenu({
title: 'slack',
image: 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQDMNu9796JQ4P17Z3ycHI44lqkc3XHs05AvHoCcNq8CDqVEH4SG2WX3eB0'
});
scrapbox.PageMenu('slack').addItem({
title: 'from thread',
onClick: () => {
const data = prompt("thread からドラッグ&コピー").replaceAll("\r", "");
const encoded = encodeURIComponent(replacer(thread, data));
location.search += (location.search ? "&" : "?") + "body=" + encoded;
}
});
scrapbox.PageMenu("slack").addItem({
title: "from channel",
onClick: () => {
const data = prompt("channel からドラッグ&コピー").replaceAll("\r", "");
const encoded = encodeURIComponent(replacer(channel, data));
location.href += "?body=" + encoded;
}
});
function replacer(regex, str) {
let m, result = "";
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
let name = "", time = "", body = "";
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(match);
switch (groupIndex) {
case 0:
break;
case 1:
name = match || "";
break;
case 2:
time = match || "";
break;
case 3:
body = match || "";
break;
default:
break;
}
});
result += `${name}${name ? " " : ""}${time}\n>${body.split("\n").join("\n>")}\n`;
}
return result;
}