0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Discord.py でBOT作成初挑戦(語尾ングアスから始まるbot開発)#01

Posted at

DiscrodのBOTを作ってみた

ことの発端は、ディスコードのサーバーでAmongUsというゲームをしているときのこと・・・
「語尾ングアス(ゴビングアス)で遊んでみませんか?」
と絶賛深夜帯で会議もないも脳が動いてない状態でのおふざけアモアスが始まりました。

その時は、ボイスチャットの自分の下の人に話してほしい語尾を渡すというもの。

その時ふと。(適当にワードを入れてランダムで取り出すくじ引き的なのがあればなぁ)
とか思いながら、ゲームを進めていました。
そして、discord.pyに手を出し始めるのでした。

まずBOTを作るには。。。

BOTっぽいものは昔、Node.jsを使ってなんとなく作成がしたことがあり、めんどくさいけど作れるのかなぁ。
というノリで作成を始めましたが、Node.jsでは確実に無理と感じたので方向転換
調べてみると、Node.js・Python・Go辺りで作成ができるらしい。。。
Goはよくわかりません・・(;'∀')
もう少し調べを進めると、Discord.py PyCordみたいな言葉が並んでおり、「Pythonで作れるのか!」
となり、作成開始。

python3を使い、Discord.pyというライブラリを使用しています。
※このあたりの説明は、先駆者がとても詳しく解説しているのでそちらをご覧ください。

作成の要件

基本的に欲しい機能は下の二つ

  1. 好きな言葉が登録できること
  2. ランダムで登録された言葉を取得できること

この二つを実現するためには、DBを使う必要があるのかなと判断しこのようなイメージをしました。

画像1.png

最初は、コマンドベースで登録・取得を作成

DBは環境を整えるのがめんどくさかったので、、、調べたら出てきたメモリDB的な機能を採用(LiteSQL)
(コードはおいおい載せていきます・・・)

ざっくりと形が出来上がったところでプロトタイプ投入

プロトタイプを運用してみて。

データの保存・取り出しは意外とあっさりできましたが。
データの取得時のランダム性に違和感・・・
この時は、SQLでDBに登録する際にランダムな数値を入れるカラムを作成していました。
そのカラムを昇順に並べ替え一番上を取り出すという何とも強引なやり方・・・・
もう少し調べると、Pythonにランダムにデータをサンプリング(取得)してくれるものを発見
(そりゃありますよね・・・w)

あとは、BOTがエラーなどをはいた時に再起動すると一緒にデータも消えてしまうこと・・・
これはまずい・・・

そこで、DBの導入とランダム取り出しの機能を変更
DBはMySQLを使用しています。

なんやかんやと作成して

完成したのが、Viewを使ったなんちゃってbotです・・・
(使用できますが、いろいろと不具合もあるので更新していきます。)
https://onl.la/9P2VAZN

ほかにもいろいろ使えそうだなと思うBotになったのではないかなと。
ワードじゃなくても当たりはずれを入れた抽選に使えたり・・・?

・今後の課題はBOT再起動時のインタラクションエラー
・終わったときに表示されるワード表の調整

ちょっとコードとかの解説は私が理解できていないのでおいておきます・・・
とりあえず、これぐらいの知識でも作れるという勇気を皆さんに^^

ではよい、BOT開発を!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?