oicqは、Node.js をベースにした QQ(Android)プロトコルの実装であり、QQ 内でよく使用される機能操作を提供しています。
yuan-botは、oicqをベースにし、TS で書かれ、MongoDB をデータベースとして使用する QQ ボットです。現在、プロジェクトは新しく作成され、Q グループのエッセンシャルメッセージにのみ対応しており、将来的にはコンテンツが充実していく予定です。
GitHub アドレス:yuan-bot
この記事は、このプロジェクトの非公式の開発日誌の経過記録です。
背景#
私の QQ には、高校や大学の時に剣三をプレイしていたゲームグループがあります。
メンバー全員が上手にプレイし、話すことも上手です。それぞれの言葉を記憶するために、私たちは QQ のエッセンシャルメッセージ機能を活用し、すべての おしゃべり クラシックな名言をエッセンシャルメッセージリストに飾りました。
この時点で、エッセンシャルメッセージの内容はもはやエッセンシャルではなく、私たちは黙ってそれを「糟粕」と呼んでいます
私たちがリストに飾ったメンバーは、苦情を言っています(もちろん、それを楽しんでいる人もいますが、私は言いません、皆さんがわかっているはずです)。彼らは管理者に訴えて、この中には管理者の陰謀があると主張しています!群友は訴えに応じて彼を討つべきです!
しかし、道は高く、魔は高いです。卑劣なグループ管理者は、群友の苦情を無視し、さらには先日、グループが 8 周年を迎えた日に糟粕の周辺商品を発売しました(幸運なことに、私も 1 つ手に入れました)。同時に、糟粕の数が最も多いメンバーにトロフィーを授与し、糟粕文化を積極的に推進しました。加えて、群友の心は乱れ、グループ内の反対の声は次第に消えていき、誰もが笑いの種になりました。
ここまで、糟粕文化はグループの設立以来のハイライトに達しました。
糟粕文化が広まるにつれ、糟粕の数も増え続け、グループ管理者はいくつかの問題に気付きました。
- 糟粕の数が 1000 に達すると、一部の糟粕メッセージを削除しないと追加できなくなり、一部のグループの歴史的な糟粕が失われます。
- このような膨大な数の中で、QQ グループのエッセンシャルメッセージは統計や時間での表示などの機能がなく、毎回手動で統計する必要があります。
- ...
Yuan-Bot は、上記の問題を解決するために生まれました。
起動#
git clone https://github.com/Magren0321/yuan-bot.git
pnpm install
pnpm run serve
プロセス#
私はフロントエンドエンジニアなので、技術の選択は自然と Node.js になりました。oicqというライブラリを見つけました。これは Node.js をベースにした Android QQ であり、私にとっては機能が比較的充実しているライブラリです。具体的な使用方法は私の説明よりもApi referenceを参照してください。
エッセンシャルデータ#
oicq 自体がグループオブジェクトにエッセンシャルデータをカプセル化していないため(おそらくまだこの機能を備えたオープンソースのライブラリはないのかもしれません)、自分で手を動かす必要がありました。
Fiddler を使用して PC 版 QQ のパケットをキャプチャし、エッセンシャルデータの API をキャプチャしました。そして、oicq が提供するログイン API を使用して Cookie を取得し、リクエストヘッダーに追加してエッセンシャルメッセージのデータを取得しました。
ついでに oicq に PR を提出しました(また PR を水増ししました)
その後、別の問題にぶつかりました。グループに新しいエッセンシャルメッセージが追加された場合、oicq でグループの tips をリッスンできないことに気付きました。昨年 8 月にすでに誰かが問題を提起していますが、まだ解決されていないようです。
元々の計画は、エッセンシャルメッセージが追加された後、サーバーのデータベースにリアルタイムで新しいエッセンシャルメッセージを保存することでしたが、現在は別の方法に変更し、定期的なタイマーに変更しました。一定の時間ごとにデータをリクエストし、最新のメッセージのタイムスタンプを記録して古いコンテンツをフィルタリングするようにしました。
この方法は私にとっては愚かな方法だと思いますが、現在の状況では、この機能を実現する他の方法が思いつきません。
コマンド#
これは比較的簡単に解決できます。指定されたグループのメッセージをリッスンし、クラスをラップして、文字列をクラスのキーとし、対応するメソッドを値として、メッセージを受け取ったらキーを渡して対応するメソッドを実行するだけです。
大まかな実装はこれで、平凡で特筆すべき点はありません🤡
最後に(おそらくまだ最後ではありません)#
yuan-bot の機能は今後も拡充され、改善される予定です(ただし、現在は仕事が始まったので、進捗は遅くなるかもしれません)
🙏oicqが提供する API とドキュメントに感謝します
🛸Power by Magren and made with love
To Be Continued.