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. About Me • HN : Atria(あとりあ) • 公立はこだて未来大学 B1 •

    好きな言語:C# • 競技プログラミングがすき • 未来大 競プロサークル代表 • C#と生活してます @AtriaSoft Atria64 http://atriasoft.work/
  2. Discord .NET で開発 “Discord .NET” を用いると、C#を用いたBot開発が可能です。 “Discord .NET” はGitHubに上がっているオープンソースライブラリです。 Why

    use C#??? • C#の強みである “LINQ” を生かして、データに簡単アクセスできるから • NuGetが便利だから • “Discord .NET” のドキュメントが充実しているから • 自分が使い慣れていたから •C#が好きだから。C#愛
  3. 難しかった問題 • 非同期処理に足をすくわれた • なんでデータ取ろうとしたら null なんですか!!!!!!!!!! • 非同期処理関係の理解には、まだまだ時間がかかりそう •

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