thedesk/plugin.md
2021-01-09 21:38:10 +09:00

7.7 KiB

TheDesk Plugin

AiScriptで書きます。

AiScript の書き方

メタデータ

### {
    manifest: 1
    name: "マイ・ファースト・プラグイン"
    version: 1
    event: "buttonOnPostbox"
    author: "Cutls P"
    apiGet: no
}

これを冒頭に入れます。

AiScriptのbooleanはyesかnoです

  • manifest
    1 を指定してください。無ければ 1 とみなします。
  • version
    数字でも文字列でも好きに使ってください。TheDesk 側では全く参照しません。
  • dangerHtml: boolean
    TheDesk:changeTextにアクセスするために必要です。
  • apiGet: boolean
    TheDesk:apiまたはTheDesk:getRequestに GET メソッドでアクセスするときに必要です。
  • apiPost: boolean
    TheDesk:apiに POST/PUT/DELETE メソッドでアクセスするときや、postExecを実行するときに必要です。
  • shortcut: number
    Alt+{number の keycode}で発火できるようにします。キーコード一覧
    eventinit, buttonOnBottom, buttonOnPostbox, noneのときにのみ有効です。
  • interval: number
    eventtipsのとき、更新間隔をミリ秒で指定します。

event

event に設定できるもの

  • buttonOnPostbox
    投稿フォームの…(90° 回転)で出てくるメニュー内に表示されます
  • buttonOnToot
    トゥートの詳細メニューに表示されます
  • init
    起動時(なるべく早い段階で)
  • buttonOnBottom
    メニューボタン(画面下部)の右に追加されます。
  • tips
    TheDesk Tipsに追加します。
  • none
    明示しません。ショートカットでのみ発火します。

追加予定…

変数

buttonOnToot のとき

  • DATA
{
    id: "トゥートのID文字列",
    acct_id: "アカウントのTheDesk内部ID"
}
  • TOOT

トゥートの API を叩いた時と同じオブジェクトが返ります。なお、プラグインが実行されてから取得します。
プラグインの実行ボタン押下から実行までの時間差はこれによるものです。

buttonOnPostbox のとき

  • POST
    投稿するときのオブジェクトがそのまま入りますが、TheDeskAcctIdという TheDesk が内部で扱うアカウントの ID(string)が入ったプロパティが追加されます。
  • ACCT_ID
    TheDesk が内部で扱うアカウントの ID(string)

関数

TheDesk:dialog(title: string, text: string, type?: string)

type のデフォルトは'info'で、他に'error','question','success'などがある

TheDesk:confirm(title: string, text: string, type?: string)

type のデフォルトは'info'で、他に'error','question','success'などがある
返り値は boolean(true|false)

TheDesk:css(query: string, attr: string, val: string)

jQuery の$(query).css(attr, val)に相当

TheDesk:openLink(url: string)

リンクを無確認で開きます。

TheDesk:api(method: 'GET'|'POST'|'PUT'|'DELETE', endpoint: string, body: string | null, acct_id: string)

endpoint はv1から書いてください。(v1/accounts...)

返り値は json のオブジェクト。

TheDesk:getRequest(endpoint: string, json: boolean)

endpoint はhttps:// を省いて書いてください。(HTTPSにリクエストを限定するため)
返り値はjsonがtrueなら json のオブジェクト。falseならstring(テキストとして処理)

TheDesk:changeText(body: string)

buttonOnTootで使用可能

該当トゥート(や他タイムラインの同一トゥート)のテキストを書き換えます。
dangerHtmlを true にしてください。
HTML を引数にすることに留意してください。

p, span, br, a タグを利用できます。また、a タグには'href', 'class', 'rel', 'target'属性以外を入れることはできず、
href の最初が javascript:で始まるものも利用できません。

TheDesk:refreshTipsView(body: string)

tipsで使用可能

Tipsのコンテンツを書き換えます。
dangerHtmlを true にしてください。
HTML を引数にすることに留意してください。

p, span, br, a, img タグを利用できます。また、a タグには'href', 'class', 'rel', 'target', 'style'属性以外を入れることはできず、
href の最初が javascript:で始まるものも利用できません。また、p, span, imgにはstyleを使用できます(imgは当然srcも可)

TheDesk:postText(text: string)

buttonOnPostboxで使用可能

トゥートボックスの中身を書き換えます。

TheDesk:postCW(force: boolean, text: string)

buttonOnPostboxで使用可能

CW を切り替えます。force はデフォルトで false で、true にするとオンに、false にするとトグルになります。
text には警告文を入れます。

TheDesk:postNSFW(force: boolean)

buttonOnPostboxで使用可能

NSFW を切り替えます。force はデフォルトで false で、true にするとオンに、false にするとトグルになります。

TheDesk:postVis(vis: 'public'|'unlisted'|'private'|'direct')

buttonOnPostboxで使用可能

公開範囲を変更します。

TheDesk:postClearbox(force: boolean)

buttonOnPostboxで使用可能

投稿ボックスをクリアします。

TheDesk:postExec()

buttonOnPostboxで使用可能

apiPostを true にしてください。
トゥートボタンを押したのと同じ挙動をします。

実例

1

https://misskey.io/@syuilo/pages/bebeyo を TheDesk で使用できるようにするためには…(勝手に改造)

### {
      name: "ベベヨ"
      version: 1
      event: "buttonOnPostbox"
      author: "syuilo"
 }

#chars =
Str:split("ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ,ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ", ",")
#yos = ["オ", "ニョ"]
#suffixes = ["オオオオオオオ", "ナーラ", "ンチーノ"]
$text <- _

@do() {
  #char1 = chars[Math:rnd(1, Arr:len(chars))]
  #char2 = chars[Math:rnd(1, Arr:len(chars))]
  #yo = ? (Math:rnd(0, 2) = 0) { yos[Math:rnd(1, Arr:len(yos))] } ... { "ヨ" }
  #n = ? (Math:rnd(0, 2) = 0) { "ン" } ... { "" }
  #suffix = ? (Math:rnd(0, 2) = 0) { suffixes[Math:rnd(1, Arr:len(suffixes))] } ... { "" }
  text <- `{char1}{char2}{n}{yo}{suffix}`
  TheDesk:postText(text)
}

do()

最初のメタデータを追加します。
また、do 関数の最下部のTheDesk:postText(text)で、TheDesk の投稿ボックスに結果を挿入しています。

2

Cat にするやつ(ユーザーがいちいち押さないと変換されないし、タグごと変わってしまうのであまりよくない)

### {
    name: "nyaize"
    version: 1
    event: "buttonOnToot"
    author: "Cutls P"
    dangerHtml: yes
}

#toot = TOOT.content
#nyaized = Str:replace(toot, "な", "にゃ")

TheDesk:changeText(nyaized)

3

BitFlyerのAPIを利用してTips部に3秒ごとにビットコインの価格を表示するやつ
https://1m.cutls.com/@Cutls/105525654999148930

### {
    name: "Bitcoinの値段を3秒ごとにTipsに表示するやつ"
    version: 1
    event: "tips"
    author: "Cutls P"
    dangerHtml: yes
    apiGet: yes
    interval: 3000
}

#json = TheDesk:getRequest("bitflyer.com/api/echo/price", yes)
#ask = json.ask
#mid = json.mid
#bid = json.bid
#text = `ASK: {ask} / MID: {mid} / BID: {bid}`
TheDesk:refreshTipsView(text)