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

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

748cf16e1d5fdb508f9725cd91fe1768?s=47 Atria
July 15, 2019

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

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

748cf16e1d5fdb508f9725cd91fe1768?s=128

Atria

July 15, 2019
Tweet

Transcript

  1. Discordユーザー認証botを 作った話 Discord .NET を用いたDiscord Bot開発 2019年07月15日 (月) 未来大 ✕

    琉大 中継LT大会!!! Speaker:Atria #ryukyu_fun_lt
  2. About Me • HN : Atria(あとりあ) • 公立はこだて未来大学 B1 •

    好きな言語:C# • 競技プログラミングがすき • 未来大 競プロサークル代表 • C#と生活してます @AtriaSoft Atria64 http://atriasoft.work/
  3. 未来大学には一年生限定のコミュニティがあります • 1年のつよいひとが作った • Discordコミュニティサーバーを運営 • 総勢100名近くが参加 • 課題の期限、学内情報などを共有 •

    Twitter以外での連絡手段としてとても有効 • サーバー固有スタンプや、クラス限定チャンネルなど •たのしい
  4. たのしい ※注※ まだ入学してない

  5. 人数が増えるごとに問題が • 人数が増えていくうちに ”一年生” 以外の流入を危惧 • このままではオープンな情報交換が 難しいとの声 • 流石に学内情報筒抜けはマズイ

    • 何かしらの認証が必要になった 0 20 40 60 80 100 120 3月 4月 5月 6月 7月 Discord “FUN 2019” 参加人数
  6. どのような認証が必要か 1. 運営コストを抑える。無料。手動招待制はあまりにも重いコスト 2. 簡単な本人確認ができるように 3. 本人確認が終了すると、内部を見れる権限を付与する 4. 本人確認行為は周りに見えないようにする こんな便利な認証システム、ネット上には転がってないよね…

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

  8. 完成品

  9. やったぜ • “!auth 学籍番号 名前” で認証botを動かすことにした • 二重認証は弾かれる • 自動メンションを行うことで、自分の投稿に対する反応だと明確にわかる

    • 権限が付与され、アクセス可能チャンネルが増えていく様子はマジ感動
  10. どう実現させたのか

  11. Discord .NET で開発 “Discord .NET” を用いると、C#を用いたBot開発が可能です。 “Discord .NET” はGitHubに上がっているオープンソースライブラリです。 Why

    use C#??? • C#の強みである “LINQ” を生かして、データに簡単アクセスできるから • NuGetが便利だから • “Discord .NET” のドキュメントが充実しているから • 自分が使い慣れていたから •C#が好きだから。C#愛
  12. 認証Botのしくみ 名簿データ参照、更新 サーバー内のやり取り を送信 “!auth” コマンドが呼ばれた時動作 Botに発言させる、 権限を付与するなど

  13. 難しかった問題 • 非同期処理に足をすくわれた • なんでデータ取ろうとしたら null なんですか!!!!!!!!!! • 非同期処理関係の理解には、まだまだ時間がかかりそう •

    名簿データの取り扱い問題 • クラウドで管理するのはどうしても怖かった(いくら有志とは言えども) • 数字列のみをクラウドで管理、文字列データはローカル管理 • データセット作成面倒だった → ”csvConvarter” っていうのを即興で作った(C#で) • 認証時周りに見えないようにする • Discord つよいひとがユーザ権限周りいじって実現してくれた。すごいね。
  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; …….みたいな
  15. Discordユーザー認証botを 作った話 Discord .NET を用いたDiscord Bot開発 2019年07月15日 (月) 未来大 ✕

    琉大 中継LT大会!!! Speaker:Atria #ryukyu_fun_lt