TOP

このエントリーをはてなブックマークに追加

ロマサガRSキャンペーン対象キャラ通知bot



ホーム > 個人開発したことまとめ > ロマサガRSキャンペーン対象キャラ通知bot

ロマサガRSキャンペーン対象キャラ通知bot

ロマサガRSというゲームで定期的にイベントが開催されるが、イベントの対象キャラが誰なのかが分かり辛過ぎるから作ってみたbot。



作ったもの(実際に稼働したときのツイート)

DBに登録した情報から、イベントの対象キャラを判断してお知らせしてくれるbot





どんな仕組み?

全体構成

イベント情報をDBに登録する作業は手動だが、それさえやってしまえば、イベントキャンペーンの対象キャラを毎日お知らせしてくれる。
↓GitHub上に以下のようなキャラクタの画像を全キャラ分格納しているので、
t260g
その際、対象キャラの名前を画像に書き、各画像のサイズを合わせたうえで合成している(サイズが揃ってないとエラーになる)。

対象キャラの画像を拾ってきてそれらを合成して↓以下のような1枚の画像に合成している。
合成画像

決まった文字や画像を書くだけのbotなら以下の記事参照。
  • TweepyとcronでTwitterボットを作ってみた話
  • ぶつかった壁とか学んだこととか

    ①画像に日本語を埋め込めない

    OpenCV という python のライブラリを使って画像編集している記事があったので、それを参考にした。OpenCVで日本語テキストを表示させようとすると文字化けしてうまくいかなかった(OpenCV の仕様)ので、PillowとOpenCVを併用した(※)。 大まかな処理の流れは以下の通り。

    ※全部Pillowでやればよかったんだろうけど、書いた当時はよくわかってなかった。この併用が次の問題につながる。

    ②妙な色の画像を生み出してしまう

    正しい画像
    BGR画像
    妙な色の画像
    RGB画像
    Pillowでは色の順番はRGB(赤、緑、青)を前提としている。 OpenCVは色の順番はBGR(青、緑、赤)。 Pillow で読み込んだ画像を OpenCV に渡す際に赤と青が逆転した結果こうなった。Pillow から OpenCV に渡す際に RGB から BGR に変換することで対処。 また、OpenCV は 画像を Numpy の配列として扱っているため、 OpenCV に渡す前に np.array(readDot) でNumPy の配列に変換している。 Pillow, Numpy, OpenCV の違いがよくわからなくなってきたが、超個人的主観で凄く雑にまとめると

    というイメージ(参考)。 コンテナ化した際、 OpenCV が使えるようにするためにひと手間加える必要があったので実際準備に多少手間がかかってる。やりたいこと次第でもっと手間は増えると思われる。

    ③日本語フォントが入ってない

    ローカルで動いたプログラムを linux 環境に持って行って動かしたら、画像に書き込んだ日本語が文字化けした。 下記コマンドで日本語フォントをインストールして、使用するフォントをプログラムで指定することで解消した。
    apt install 'fonts-takao-*'

    フォントの指定箇所はプログラム内で明示的に指定。

    参考: