Discordに垂れ流す用のStream検索UserScript
使い方
自分のユーザーページにこのスクリプトをimportする
任意のページ上で任意の単語を選択する
ポップアップメニューに下記2つが追加されている
「Stream検索」:選択文字列でStreamを検索して、その結果をクリップボードにコピーする
「Stream検索爆弾」:選択文字列でStreamを検索して、その結果をクリップボードにコピーする(Discordに貼り付けた結果、プレビューが表示される)
どれかを実行したら、クリップボードにコピーされているのでDiscordの任意のチャンネルにペーストする。
Q.こちらはスマホでも使えるスクリプトですか?(スマホでメニューが出てこないので念のため確認)
Chromeなら使えるみたいです!Firefoxは無理でした。。
ありがとうございます、なるほどです(Safariの民より)。
なるほど!情報ご提供ありがとうございます!スマホの民には厳しいScrapbox。
Porterでは使えました
おお!良かったです
ChromeのPWAはダメだった。Chromeでは大丈夫だったのに。。ナゼ。
あれ?いま試したらChromeでもできなくなってる。
ええええ、解せぬ…。
code:script.js
scrapbox.PopupMenu.addButton({
title: 'Stream検索',
onClick: function (text) {
main(text)
}
});
scrapbox.PopupMenu.addButton({
title: 'Stream検索爆弾',
onClick: function (text) {
main(text, true)
}
});
export function main(word, bomb=false) {
const search_word = word === '' ? '哲学' : word
const stream = JSON.parse(httpGet(api_url))
const filtered_stream = filterStream(search_word, stream)
const result = filtered_stream.slice(0,10).map(page => {
let url = ${project_url}${page.title}#${page.line.id}
url = bomb ? ● ${url} : ● <${url}>
return url + ' 【' + page.line.text.replace(new RegExp(search_word,"g"), **__${search_word}__**).replace(/^ +/g,'') + '】'
})
const message = filtered_stream.length > 0
? ✨✨✨アープラノートの最近の記事で「 ${search_word} 」 が${filtered_stream.length}件ヒットしました(内${result.length}件を表示します):✨✨✨
: 😳😳😳アープラノートの最近の記事で「 ${search_word} 」はヒットしませんでした。記事を書いてみましょう。😳😳😳
if( copyText(message + '\n\n' + '>>> ' + result.join('\n')) ){
alert('クリップボードにコピーしました。Discordに貼り付けてね')
}
}
function httpGet(theUrl) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( 'GET', theUrl, false ); // false for synchronous request
xmlHttp.send( null );
return xmlHttp.responseText;
}
function filterStream(word, stream) {
// streamの各ページで検索ワードに該当する行を抽出する
let filtered_pages = stream'pages'.map(page => { return {
}
})
filtered_pages = filtered_pages.filter(x => x'lines'.length > 0) // 最新履歴の行だけ抽出する
filtered_pages = filtered_pages.map(page => {
return {
}
})
return filtered_pages
}
function copyText(target_str) {
// Clipboard APIが使えるかの確認
if(navigator.clipboard){
// 対象となる要素のテキストをコピー
navigator.clipboard.writeText(target_str);
return true;
} else {
return false;
}
}