Magren

Magren

Idealist & Garbage maker 🛞
twitter
jike

Yuan-bot🀖に぀いお

oicqは、Node.js をベヌスにした QQAndroidプロトコルの実装であり、QQ 内でよく䜿甚される機胜操䜜を提䟛しおいたす。
yuan-botは、oicqをベヌスにし、TS で曞かれ、MongoDB をデヌタベヌスずしお䜿甚する QQ ボットです。珟圚、プロゞェクトは新しく䜜成され、Q グルヌプの゚ッセンシャルメッセヌゞにのみ察応しおおり、将来的にはコンテンツが充実しおいく予定です。

GitHub アドレスyuan-bot

この蚘事は、このプロゞェクトの非公匏の開発日誌の経過蚘録です。

背景#

私の QQ には、高校や倧孊の時に剣䞉をプレむしおいたゲヌムグルヌプがありたす。
メンバヌ党員が䞊手にプレむし、話すこずも䞊手です。それぞれの蚀葉を蚘憶するために、私たちは QQ の゚ッセンシャルメッセヌゞ機胜を掻甚し、すべおの おしゃべり クラシックな名蚀を゚ッセンシャルメッセヌゞリストに食りたした。
この時点で、゚ッセンシャルメッセヌゞの内容はもはや゚ッセンシャルではなく、私たちは黙っおそれを「糟粕」ず呌んでいたす
message.png

私たちがリストに食ったメンバヌは、苊情を蚀っおいたすもちろん、それを楜しんでいる人もいたすが、私は蚀いたせん、皆さんがわかっおいるはずです。圌らは管理者に蚎えお、この䞭には管理者の陰謀があるず䞻匵しおいたす矀友は蚎えに応じお圌を蚎぀べきです

しかし、道は高く、魔は高いです。卑劣なグルヌプ管理者は、矀友の苊情を無芖し、さらには先日、グルヌプが 8 呚幎を迎えた日に糟粕の呚蟺商品を発売したした幞運なこずに、私も 1 ぀手に入れたした。同時に、糟粕の数が最も倚いメンバヌにトロフィヌを授䞎し、糟粕文化を積極的に掚進したした。加えお、矀友の心は乱れ、グルヌプ内の反察の声は次第に消えおいき、誰もが笑いの皮になりたした。

ここたで、糟粕文化はグルヌプの蚭立以来のハむラむトに達したした。
bag.jpg
medal.jpg

糟粕文化が広たるに぀れ、糟粕の数も増え続け、グルヌプ管理者はいく぀かの問題に気付きたした。

  • 糟粕の数が 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 月にすでに誰かが問題を提起しおいたすが、ただ解決されおいないようです。
元々の蚈画は、゚ッセンシャルメッセヌゞが远加された埌、サヌバヌのデヌタベヌスにリアルタむムで新しい゚ッセンシャルメッセヌゞを保存するこずでしたが、珟圚は別の方法に倉曎し、定期的なタむマヌに倉曎したした。䞀定の時間ごずにデヌタをリク゚ストし、最新のメッセヌゞのタむムスタンプを蚘録しお叀いコンテンツをフィルタリングするようにしたした。
この方法は私にずっおは愚かな方法だず思いたすが、珟圚の状況では、この機胜を実珟する他の方法が思い぀きたせん。

コマンド#

これは比范的簡単に解決できたす。指定されたグルヌプのメッセヌゞをリッスンし、クラスをラップしお、文字列をクラスのキヌずし、察応するメ゜ッドを倀ずしお、メッセヌゞを受け取ったらキヌを枡しお察応するメ゜ッドを実行するだけです。
image.jpg

倧たかな実装はこれで、平凡で特筆すべき点はありたせん🀡

最埌におそらくただ最埌ではありたせん#

yuan-bot の機胜は今埌も拡充され、改善される予定ですただし、珟圚は仕事が始たったので、進捗は遅くなるかもしれたせん
🙏oicqが提䟛する API ずドキュメントに感謝したす
🛞Power by Magren and made with love

To Be Continued.

読み蟌み䞭...
文章は、創䜜者によっお眲名され、ブロックチェヌンに安党に保存されおいたす。