Skip to content

Instantly share code, notes, and snippets.

@xreiju
Last active March 15, 2021 10:56
Show Gist options
  • Save xreiju/6d89261941f5cd66e70942dfe6d4af33 to your computer and use it in GitHub Desktop.
Save xreiju/6d89261941f5cd66e70942dfe6d4af33 to your computer and use it in GitHub Desktop.
Misskey入門.md

Misskey入門

登録、投稿などの基本操作にはすぐに慣れるでしょうから、ここでは触れません!

なお、PC版を使っていることを前提に記述していますが、スマホ版でも似たような手段で設定を変更することができます。

アイコンが丸いのが嫌

設定 -> Web -> 円形のアイコンを使用 のところから、四角いアイコンへ変更できます。

catって何ですか?

cat は、設定 -> プロフィール -> このアカウントはCatです のところから有効化できます。

cat の効果は次の通りです。

  • 投稿中の「な」「ナ」「ナ」が、それぞれ「にゃ」「ニャ」「ニャ」に変換されます。参照時に置換が実行されます。
  • 円形のアイコンを使用しているとき、アイコンに猫耳が付きます。

ストーキングって何?

ストーキングを有効にすると、そのユーザーが他の人に送信したリプライもTLに流すことができます。

Mastodonの人の投稿も流れてくるんですが…

MisskeyとMastodonはActivityPub互換です。この互換性を持つサービスは、異なるインスタンス同士でも投稿を見たりリアクションをつけることができます。そのため、Mastodonにいる人たちの投稿も流れてくるのです。

MastodonやMisskeyだけがActivityPub互換というわけではなく、他にもたくさんの対応サービスが存在します。自分の肌に合うようなインスタンスを見つけて、快適なSNSライフを手に入れましょう!

この投稿の文字、動いてる!!!なにこれ!!

それはMFM(Misskey Fravored Markdown)を用いて記述された投稿でしょう。TypeScriptが読める人は、このあたりを読めば、どのような要素があるのかわかります。詳しくはこちらのページを参照してください。

ドライブの容量はどうやって確認するんですか?

設定 -> ドライブ で、今何%の使用率なのかが確認できます。インスタンスによって容量は異なります。詳しくは管理者にお問い合わせください。

@aiちゃんがリバーシで反応しなくなった

Misskeyは高負荷時に自動的に再起動する機能があります。このとき、@aiはサーバーとの接続が一度途切れてしまうため、実行中のゲームを放棄してしまいます。この場合、リバーシの画面の下方にある投了ボタンを押すことでゲームを終了することができます。

もっとMisskeyのことを知りたい!/まだまだわかってないことが多い!

joinmisskey.github.ioにアクセスしてみましょう!このサイトはデザインもMisskeyに寄せていて見やすく、おすすめです。

バグを見つけました

Misskeyはオープンソースです。バグを見つけたら、開発者/管理者の@syuiloにリプライを送信すると良いでしょう。GitHubでIssueやPull Requestを送信するのも一つの手です。多くの人が、開発や翻訳に協力しています。

開発者にお布施をしたい

syuiloのPatreonで寄付できます。詳しくは@syuiloにリプライを飛ばしてください。

MisskeyのAPIの叩き方

基本的には、POSTで叩くことが多く、bodyにjsonを埋め込んでリクエストを送信します。

ここでアプリを作成し、appSecretを取得して良い感じにやる方法も存在しますが、今回は簡単のため"i"を使います。

"i"とは?

"i"は、設定 -> API -> Token のところにあるトークンのことです。APIを叩く際に、"i": "XXXXXXXXXXXXX..." の形式でbodyに含める必要があります。

では、例として https://misskey.xyz/api/notes/create を叩いてみましょう。これは投稿を作成するエンドポイントで、Renoteもここを叩いて実行します。

$ curl -X POST -H "Content-Type: application/json" -d '{"i": "!から始まるtokenで埋めてください", "text": "test"}' https://misskey.xyz/api/notes/create

このようにして、APIを叩いてみると、下のようなレスポンスが帰ってきます。

{
  "createdNote": {
    "createdAt": "2018-08-19T07:51:17.466Z",
    "mediaIds": [],
    "replyId": null,
    "renoteId": null,
    "text": "test",
    "cw": null,
    "tags": [],
    "tagsLower": [],
    "userId": "57d60c8478c9c715e6ae818a",
    "viaMobile": false,
    "geo": null,
    "appId": null,
    "visibility": "public",
    "visibleUserIds": [],
    "_renote": null,
    "id": "5b79217517ac863798f6d3c6",
    "user": {
      "name": "Reiju",
      "username": "reiju",
      "description": "  σ   < こんにちは\nππ\nν\n\n日本語 / English\nCene mi'd ekce lineparine'i firlex.\n世界一D言語を書ける男(嘘)",
      "two_factor_temp_secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "host": null,
      "createdAt": "2016-09-12T02:01:40.002Z",
      "driveCapacity": 1073741824,
      "followersCount": 258,
      "followingCount": 609,
      "hostLower": null,
      "notesCount": 1753,
      "isBot": false,
      "isPro": null,
      "lastUsedAt": "2018-08-19T07:51:16.798Z",
      "links": null,
      "twitter": {},
      "avatarColor": [
        226,
        214,
        178
      ],
      "bannerColor": [
        144,
        94,
        235
      ],
      "isCat": true,
      "bannerUrl": "https://s3.arkjp.net/misskey/drive/7f283e99-bdf2-4f26-8c94-b6db1ea30205/IMG_2568.JPG.cropped.png",
      "pinnedNoteId": "5b79195828a1bf37a8506a27",
      "id": "57d60c8478c9c715e6ae818a",
      "avatarUrl": "https://misskey.xyz/files/58cfc0f12a1f8914f3284da3"
    },
    "media": [],
    "prev": null,
    "next": null,
    "myReaction": null
  }
}

このレスポンスには、たった今投稿したNoteの詳細や、その投稿者の詳細が記述されています。もしリクエストに何か変なところがあると、{"error": "xxxxxx"}の形式でレスポンスが返ってきます。例えば、tokenが正しくない場合、{"error": "AUTHENTICATION_FAILED"}と返ってきます。

タイムラインのWebsocketに接続してみたい

リアルタイムで投稿を拾ってみましょう!

wss://misskey.xyz/?i=XXXXXXに接続すればよいです。wss://misskey.xyz?i=XXXXXXではないことに気を付けてくださいね。このサイトで簡単に試すことができますので、ぜひやってみてください。

つなげると、投稿がTLで見えるたびにメッセージが受信されると思います。それらのメッセージはすべてjson形式で、typeの部分を参照することでどのような意図で送信されているのかがわかるようになっています。

また、WebSocketを接続している間は、WebSocketを経由してAPIを叩くことができます。

{
    "type": "api",
    "id": "tekitouna_ransuu_wo_butikomu_nado_suru",
    "endpoint": "notes/create",
    "data": {
        "text": "test"
    }
}

data の部分にAPIを叩くときに必要な情報を与えます。そうしてWebSocket経由でこれを送信すると、先ほどのnotes/createを叩いた時と同様の効果を、これで得ることができます。

なお、 id は各メッセージごとに別々の値を与えてあげるとよいです。各リクエスト毎に

{
  "type": "api-res:tekitouna_ransuu_wo_butikomu_nado_suru",
  "body": {
    "res": {
      "createdNote": {
        "createdAt": "2018-08-19T08:13:52.498Z",
        "mediaIds": [],
        "replyId": null,
        "renoteId": null,
        "text": "test",
        "cw": null,
        "tags": [],
        "tagsLower": [],
        "userId": "57d60c8478c9c715e6ae818a",
        "viaMobile": false,
        "geo": null,
        "appId": null,
        "visibility": "public",
        "visibleUserIds": [],
        "_renote": null,
        "id": "5b7926c02fec6c741c414806",
        "user": {
          "name": "Reiju",
          "username": "reiju",
          "description": "  σ   < こんにちは\nππ\nν\n\n日本語 / English\nCene mi'd ekce lineparine'i firlex.\n世界一D言語を書ける男(嘘)",
          "two_factor_temp_secret": "PI4HK5BIIIYEK53GIQXTSL3BMMSECUCFLM4XQIKHHZ2VU5KGOBCQ",
          "host": null,
          "createdAt": "2016-09-12T02:01:40.002Z",
          "driveCapacity": 1073741824,
          "followersCount": 259,
          "followingCount": 611,
          "hostLower": null,
          "notesCount": 1760,
          "isBot": false,
          "isPro": null,
          "lastUsedAt": "2018-08-19T08:13:19.877Z",
          "links": null,
          "twitter": {},
          "avatarColor": [
            226,
            214,
            178
          ],
          "bannerColor": [
            144,
            94,
            235
          ],
          "isCat": true,
          "bannerUrl": "https://s3.arkjp.net/misskey/drive/7f283e99-bdf2-4f26-8c94-b6db1ea30205/IMG_2568.JPG.cropped.png",
          "pinnedNoteId": "5b79195828a1bf37a8506a27",
          "id": "57d60c8478c9c715e6ae818a",
          "avatarUrl": "https://misskey.xyz/files/58cfc0f12a1f8914f3284da3"
        },
        "media": [],
        "prev": null,
        "next": null,
        "myReaction": null
      }
    }
  }
}

…のようなレスポンスが返ってきますが、このとき type を見るとapi-res:xxxxxxxxxxxxxxxxxxxとなるため、これでどのリクエストに対する返答なのかがわかるようになっています。

詳しくはここを参照してください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment