Discordに簡易的なアフィリエイト的システムを構築するよ

その他Python, Discord

どもども、連日のDiscordBOT記事です。
今回はDiscordにアフィリエイト的な機能を実装してみようと思います。今回の記事で実装するのは、サーバーへの招待数によってサーバー内の役割を自動付与する機能です。

これは今度記事にしようと思っている、とあるサーバーで実装されていた機能なのですが、面白そうだったので、自分でも実装してみました。もしかしたら、より簡単・正確に実装する方法があるのかもしれませんので、あくまで趣味で作ったということをご了承ください。



OS : Ubuntu 16.04 LTS, MacOS
言語 : Python3.6.0
DB : MySQL


0. 方法

アフィリエイトの機能ではありませんが、Discordには招待状の仕組みがあり、サーバーへ招待した数が画面上で確認することができます。しかし、ここで表示される招待数は、サーバーに出入りすることにより、いくらでも水増しすることができてしまいます。そんな仕様でアフィリエイトを行おうとすると、誰でも最高の報酬を獲得することができてしまいます。

というわけで今回は上記の招待状の機能を使いつつ、BOTとデータベースを活用することでより正確なアフィリエイトシステムを構築します。機能としては、招待数によってサーバー内のRoleが変化するような動きを作ります。

1. 下準備

例のごとくDiscordのBOTを作成するので、公式サイトからBOTの登録をやります。やり方は、以前の記事に書いてあるので、そちらをご覧ください。こちらを参考にBOTトークンの獲得までやってください。

次に、データベースの準備です。自分はすでにMAMPを導入していたのでデータベース環境は整っていました。なので本記事ではデータベース環境の構築は省略させてもらいます。とりあえず、Pythonのコードからデータベースを扱えるように環境を整えてください。

テーブルはユーザーテーブル(user)と招待状テーブル(invite)を用意します。それぞれのテーブルは以下の感じの設計をしてみました。

データベースの構造については、個人的に納得していません。が、今回は気にしません。

2. プログラムを書く

では本記事のメインになる、コードを掲載していきます。今回は機能によってファイルを分割しているので、ちょっと件数が増えてしまいましたが、ただ実行したい人は単純にコピペしていけば大丈夫です。

まずは、データベースの情報やDiscordのトークンなどを記述しておくものです。さらに、招待数による役割(Role)の変更を定義もこのファイルでやっていきます。もし、役割の変更の機能を別のものに変えるのであれば、その部分は不要です。

これらの設定ファイルをご自身の環境や実現したい招待数に対応するように書き換えてください。以降のコードでこのファイルを読み込んでいきますので、ちゃんと書き換えておいてください。

今回はデータベースをいじることが多いので、それらの操作をまとめて関数化しておきます。以降のコードでデータベースを使用するときは、ここで定義した関数を使用します。

基本的にSELECT文とINSERT文をいちいち書くのがめんどくさかっただけなので、必ずこのようなファイルを作る必要なはないのですが、管理はしやすい気がするので…自己満足です。

次は、役職関係の関数をまとめたものです。もし役職変更の機能を別のものに変更する場合は、もちろん不要ですので、ご自身のやりたいことに合わせて作成してください。

最後に、本記事で最も大切なコードである、招待状の獲得・確認・招待数の登録・確認を行う機能を持つBOTの本体コードです。実際にプログラムを実行する際は、このコードを指定して実行します。

このコードでやっているのは、招待状で誰かがサーバーに登録した瞬間に、DBに登録してある情報とDiscord上の招待数の差を獲得し、もし過去に登録してない人で招待数が増えていたのであれば、有効招待数を増加させます。そして、有効招待数が設定した値を超えていれば役職を変更するという動作をします。

以上でコードの掲載はおしまいです。もし役職の変更部分の機能を別のものにしたいのであれば、”ランクアップの確認アンド更新”の部分を書き換えればいいのではないかなと思います。

3. 注意点

本記事によって発生したいかなる損害も保証しかねます。また、掲載したコードは最適解ではないのでご了承ください。

今回紹介したプログラムは招待状の期限が無いものだけに制限しています。制限があるものはプログラムの実行時や招待時に削除されます。また、プログラムが実行されていない時に発生した招待は全て無効になってしまいます。Discordの仕様上、数ミリ秒単位で同時に登録がなされた場合、招待数が複数カウントされてしまう可能性があります。


コーディングで分からないことがあれば
プログラミングや環境構築で分からないことがあったら『teratail』というエンジニア特化型のQ&Aサービスがオススメです。自分もどうしても分からないことがあったら、時々質問しにいきますが、かなりニッチな質問にも意外と早く回答がつくのでとても頼もしいです。という宣伝でした。


おわりに

さて、ここまで頑張ってきました。Discordにアフィリエイト的なシステムを構築するのに、どれほどの需要があるのかはわかりませんが、面白そうだったので、実装・記事にしました。冒険心のある方は是非使ってみてね。