sbコマンド
いろんな機能に幅広く対応できるようにするために、検索ボックスにコマンドを打ち込んで実行する。
https://gyazo.com/b4e3476c67ecb5dc2beef9a02abae184
ボタンを生やす
code:script.js
let new_button = document.querySelector('.navbar-form .new-button')
let clone_button = new_button.cloneNode()
let img = document.createElement('img')
img.style.width="32px"
img.style.height="32px"
img.style.borderRadius="50%"
clone_button.append(img)
clone_button.title = "Discord用コマンド実行"
clone_button.removeAttribute('href')
new_button.after(clone_button)
code:script.js
async function fetchArplaPages({limit='100', sort='updated', skip='0'}) {
const response = await fetch(https://scrapbox.io/api/pages/arpla?limit=${limit}&sort=${sort}&skip=${skip})
const data = await response.json()
return data;
}
code:script.js
async function getLastVisited({num = 10}){
const data = await fetchArplaPages({sort:'accessed'});
const pages = data.pages.filter(page => page.pin === 0)
num = num > 20 ? 20 : num // 最大20件
return pages.slice(0,num)
}
code:script.js
function copyText(target_str) {
// Clipboard APIが使えるかの確認
if(navigator.clipboard){
// 対象となる要素のテキストをコピー
navigator.clipboard.writeText(target_str);
return true;
} else {
return false;
}
}
code:script.js
async function visitedCommand(args){
// Date last visited
const pages = await getLastVisited({num: args0}) const bomb = args.some(arg => arg === "bomb")
const result = makeLinkList({pages:pages, bomb:bomb})
copyText(makeHeader(pages.length) + '\n\n' + result.join('\n'))
alert('クリップボードにコピーしました。Discordに貼り付けてね。')
}
function makeLinkList({pages=[], bomb=false}) {
const result = pages.map(page => {
let url = https://scrapbox.io/arpla/${page.title}
url = url.replaceAll(' ', '_')
url = bomb ? ● ${url} : ● <${url}>
return url
})
return result
}
function makeHeader(num) {
return ✨✨✨アープラノートで最近閲覧された ${num} 件の記事を表示します:✨✨✨
}
sbコマンド本体
code:script.js
const form = document.querySelector('.form-group .dropdown input')
clone_button.addEventListener('click', main)
async function main(e){
const command = form.value.split(' ')0 const args = form.value.split(' ').slice(1)
if ( command !== '!sb' ) { return }
if ( args0 === 'random') { // randomコマンド
console.log(args)
}
else if ( args0 === 'visited') { await visitedCommand(args.slice(1))
}
}