Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Discordユーザー認証botを作った話 / The Discord User Authentication Bot

Atria
July 15, 2019

Discordユーザー認証botを作った話 / The Discord User Authentication Bot

Connpassです。
未来大 ✕ 琉大 中継LT大会!!! 〜間とって長野とかでやりたかった〜
https://connpass.com/event/133298/
-------------------------------------------
未来大学と琉球大学の対バンLT会で話したスライドです。
技術的な詳しい話はそのうちブログにまとめる"予定"です。

Atria

July 15, 2019
Tweet

More Decks by Atria

Other Decks in Technology

Transcript

  1. Discordユーザー認証botを
    作った話
    Discord .NET を用いたDiscord Bot開発
    2019年07月15日 (月)
    未来大 ✕ 琉大 中継LT大会!!!
    Speaker:Atria #ryukyu_fun_lt

    View Slide

  2. About Me
    • HN : Atria(あとりあ)
    • 公立はこだて未来大学 B1
    • 好きな言語:C#
    • 競技プログラミングがすき
    • 未来大 競プロサークル代表
    • C#と生活してます
    @AtriaSoft
    Atria64
    http://atriasoft.work/

    View Slide

  3. 未来大学には一年生限定のコミュニティがあります
    • 1年のつよいひとが作った
    • Discordコミュニティサーバーを運営
    • 総勢100名近くが参加
    • 課題の期限、学内情報などを共有
    • Twitter以外での連絡手段としてとても有効
    • サーバー固有スタンプや、クラス限定チャンネルなど
    •たのしい

    View Slide

  4. たのしい
    ※注※
    まだ入学してない

    View Slide

  5. 人数が増えるごとに問題が
    • 人数が増えていくうちに ”一年生”
    以外の流入を危惧
    • このままではオープンな情報交換が
    難しいとの声
    • 流石に学内情報筒抜けはマズイ
    • 何かしらの認証が必要になった
    0
    20
    40
    60
    80
    100
    120
    3月 4月 5月 6月 7月
    Discord “FUN 2019”
    参加人数

    View Slide

  6. どのような認証が必要か
    1. 運営コストを抑える。無料。手動招待制はあまりにも重いコスト
    2. 簡単な本人確認ができるように
    3. 本人確認が終了すると、内部を見れる権限を付与する
    4. 本人確認行為は周りに見えないようにする
    こんな便利な認証システム、ネット上には転がってないよね…

    View Slide

  7. 必要なら作ればいいじゃない
    エンジニア界のマリー・アントワネット

    View Slide

  8. 完成品

    View Slide

  9. やったぜ
    • “!auth 学籍番号 名前” で認証botを動かすことにした
    • 二重認証は弾かれる
    • 自動メンションを行うことで、自分の投稿に対する反応だと明確にわかる
    • 権限が付与され、アクセス可能チャンネルが増えていく様子はマジ感動

    View Slide

  10. どう実現させたのか

    View Slide

  11. Discord .NET で開発
    “Discord .NET” を用いると、C#を用いたBot開発が可能です。
    “Discord .NET” はGitHubに上がっているオープンソースライブラリです。
    Why use C#???
    • C#の強みである “LINQ” を生かして、データに簡単アクセスできるから
    • NuGetが便利だから
    • “Discord .NET” のドキュメントが充実しているから
    • 自分が使い慣れていたから
    •C#が好きだから。C#愛

    View Slide

  12. 認証Botのしくみ
    名簿データ参照、更新
    サーバー内のやり取り
    を送信
    “!auth” コマンドが呼ばれた時動作
    Botに発言させる、
    権限を付与するなど

    View Slide

  13. 難しかった問題
    • 非同期処理に足をすくわれた
    • なんでデータ取ろうとしたら null なんですか!!!!!!!!!!
    • 非同期処理関係の理解には、まだまだ時間がかかりそう
    • 名簿データの取り扱い問題
    • クラウドで管理するのはどうしても怖かった(いくら有志とは言えども)
    • 数字列のみをクラウドで管理、文字列データはローカル管理
    • データセット作成面倒だった → ”csvConvarter” っていうのを即興で作った(C#で)
    • 認証時周りに見えないようにする
    • Discord つよいひとがユーザ権限周りいじって実現してくれた。すごいね。

    View Slide

  14. みんなもC#で作ってみよう
    Linq使うと簡単に実装できるよ。C#は楽しいよ。
    int sID = int.Parse(s[1]);
    string sName = s[2];
    for (int i = 0; i <= ls.Count; i++) {
    //番兵
    if (i == ls.Count) {
    await channel.SendMessageAsync(context.User.Mention + " " + "Auth Failure...");
    break;
    }
    if (sID == ls[i].ID) {
    if (sName == ls[i].Name) {
    //auth成功処理
    await channel.SendMessageAsync(context.User.Mention + " " + "Auth Succeed!");
    AddAuthedID(s[1]);
    var role = context.Guild.Roles.FirstOrDefault(x => x.Name == "authed user");
    await (context.User as IGuildUser).AddRoleAsync(role);
    break;
    …….みたいな

    View Slide

  15. Discordユーザー認証botを
    作った話
    Discord .NET を用いたDiscord Bot開発
    2019年07月15日 (月)
    未来大 ✕ 琉大 中継LT大会!!!
    Speaker:Atria #ryukyu_fun_lt

    View Slide