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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. どう実現させたのか

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. みんなも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 full-size slide

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

    View full-size slide