※この記事はこの記事の続き的な立ち位置に当たります
読み飛ばしてください
おはようございます、しなもんです。
Qiita Engineer Festa 2024、楽しんでおられますでしょうか。
最近Qiitaのトレンドをよく確認するようになったり、好きなorganizationの記事を読んだりするのですが、
そんな記事を自動でdiscordに送ってくれたら、便利ですよね~(押しつけ)
そこで「QiitaのトレンドをDiscordから簡単に確認できるBot」を作りました。
概要
このプロジェクトは、Qiitaの人気記事(トレンド)を取得し、Discordから確認できるようにするBotです。
また、特定のユーザーやOrganizationが記事を投稿すると、Discordに通知する機能もあります。
オープンソースソフトウェア(OSS)として公開してみます。
OSS開発は初心者なのですが、Qiitaというエンジニアが集まる場所だからこそ
他の開発者も一緒に開発してほしいと考えました。
リポジトリはこれです。
技術スタック
- 言語: Python 3.9
- フレームワーク: Pycord
- feedparser: RSSフェードの処理に使用
- pyyaml: Configファイルのロードに使用
- requests: HTTPリクエストの送信に使用
また、Docker上に構築しており、誰でも簡単にBotを構築できるようにしています。
機能の詳細
Qiitaのトレンド記事の取得
-
/trend today
コマンドを実行 - トレンドのrssを取得し、提示する記事をリスト化
- discordのembedにまとめ、応答
記事投稿の自動通知
- Configファイルから監視するrssを読み込み
- Configファイルで指定した時間おきにrssを取得、新しい記事があればリスト化
- discordのembedにまとめ、Configファイルで指定したチャンネルに送信
開発プロセス
設計段階での考慮点
Configファイルを前提とする機能設計
最終的に様々な方がセルフホストすることを考え、yaml
でConfigファイルを用意する仕組みにしています。
型の厳格化
できるだけ型を指定するコードを書いて、トラブルが無いようにしています。
オブジェクト指向の徹底
記事やConfigデータにモデルを用意してコードを書きました。
Botのトラブルを最小化する仕組み
なるべくPycordの提供する機能に則って構築し、ネット接続遮断からの再接続などを自動で行われるようにしています。
実装中に直面した課題と解決策
コンテナ内でConfigファイルを配置するパスが上手く指定できない
ルートからの絶対パスでゴリ押し配置しました...
いい案があれば教えてください。
記事投稿通知のテストが難しい
かなり前からプロジェクトを作成し、
私自信がたくさん記事を書くことでテストしまくりました。過酷。
テスト用RSSを用意すればよかったね
OSSとしての公開
いままでOSSとして何かに取り組んだことはないんですが、
とりあえずGithubに関するQiitaの記事をたくさん読んで挑戦してみています。
コントリビュート待ってます!
今後の展望
- QiitaAPIと組み合わせて、いいね数やストック数も表示したい
https://github.com/CinnamonSea2073/qiita_supporter-bot/issues/2 - セルフホストが無理な方向けに、ダッシュボード上でConfigを設定してBotを使えるタイプのものも作りたい
- Slackなど他のチャットプラットフォームへの対応
さいごに
暇を見つけてはがんばってつよつよbotにしたいと思います。
がんばります。