備忘録

備忘録

C#でDiscord BOTを作る

Ⅰ. はじめに

kagasu.hatenablog.com

こちらの記事でプログラミング不要なBOTの作成方法を書きましたが、
細かい動きをするBOTを作るにはやはりコード書く必要が出てきます。

この記事ではC#でecho botのサンプルを紹介します。

Ⅱ. 環境

  • .NET Core 2.0

Ⅲ. echo botの作り方

1. BOTを作成する
  • ClientID
  • Token

の2つが必要になります。
https://discordapp.com/developers/applications/me

2. 以下のURLに自分のBOTのClientIDを指定してアクセスして、BOTをDiscordチャンネルに招待する

https://discordapp.com/oauth2/authorize?&client_id={CLIENT_ID}&scope=bot&permissions=0

3. NuGet から Discord.Net をインストールする
4. サンプルコード
class Program
{
    const string BOT_NAME = "echo bot";

    static void Main(string[] args) => MainAsync().Wait();

    static async Task MainAsync()
    {
        var client = new DiscordSocketClient();
        var token = "**********";

        await client.LoginAsync(TokenType.Bot, token);
        await client.StartAsync();

        client.MessageReceived += Client_MessageReceived;

        Console.ReadLine();
    }

    static async Task Client_MessageReceived(SocketMessage arg)
    {
        if (!arg.Author.Username.Equals(BOT_NAME))
        {
            await arg.Channel.SendMessageAsync(arg.Content);
        }
    }
}
5. 実行結果

f:id:kagasu:20170718114016p:plain

DiscordでTwitterやSteamやブログRSSを通知するBOTを作る方法

Ⅰ. はじめに

Twitterで誰かがツイートした時
・ブログが更新された時
・Steamゲームのニュースが更新された時
等、何か起きた時に自動的にDiscordで通知を受け取る方法です。

上記のようなケースだけでなく、様々なケースに応用が可能です。
また、IFTTT を利用する事でプログラムを一切書く事無く簡単にBOTが作れます。


Ⅱ. やり方(Twitterの場合)

1. Discordで「チャンネルの編集」をクリック

f:id:kagasu:20170718104444p:plain

2. 「Webhook を作成」をクリック

f:id:kagasu:20170718104543p:plain

3. 「Webhook URL」をコピーし、保存する


4. Webブラウザで IFTTT にログインし、「New Applet」をクリック

f:id:kagasu:20170718103145p:plain

5. 「this」をクリックしてTwitterを選択



6. 特定のユーザーがツイートした時に通知を受け取る場合は「New tweet by a specific user」を選択し、対象のユーザー名を入力する


7. 「that」をクリックしてWebhooksを選択



8. 「Make a web request」をクリック


9. 必要な情報を入力します

① 3でコピーしたURLを貼り付ける
② POST を選択
③ application/json を選択
④ 以下を入力

{
  "content":"@{{UserName}} {{CreatedAt}}: {{LinkToTweet}}"
}


10. 「Create action」をクリック
11. 保存する名前をつけて「Finish」をクリック

以上で対象のユーザーがツイートすると自動的に通知されるようになります。
f:id:kagasu:20170718102223p:plain

Ⅲ. やり方(ブログやSteamニュース等のRSSの場合)

Ⅱとやり方はほとんど同じです。
以下の2点が異なります。

・Ⅱ-5でRSSを選択する
・Ⅱ-9の④に入力する値が以下に変わる

{
  "content": "**{{EntryTitle}}** {{EntryPublished}}: {{EntryUrl}} "
}

.NET CoreでSystem.Drawingを使う

Ⅰ. はじめに

System.Drawing は WindowsのGDI+に依存している為標準の.NET Coreで利用することができません。
解決策として CoreCompat.System.Drawing を使う方法を紹介します。

Ⅱ. Windowsの場合

1. NuGet で CoreCompat.System.Drawing をインストールする

以上です。

Ⅲ. Linux/macOSの場合

1. NuGet で CoreCompat.System.Drawing をインストールする
$ dotnet add package CoreCompat.System.Drawing.v2 -v 5.2.0-preview1-r131

以上です。

以下のエラーが出る場合
Unhandled Exception:
  System.TypeInitializationException:
    The type initializer for 'System.Drawing.GDIPlus' threw an exception. --->
      System.DllNotFoundException: Unable to load DLL 'gdiplus':
        The specified module or one of its dependencies could not be found.

これを実行して下さい。

$ apt-get install -y libgdiplus

WindowsでPOCO C++を使う

f:id:kagasu:20170702192622p:plain

Ⅰ. はじめに

「POCO C++」はモダンで強力なC++ライブラリです。

等の機能があります。
f:id:kagasu:20170702192612p:plain

Ⅱ. Windows で使う

1. コンパイルする

Testは不要なのでアンロードさせます。
f:id:kagasu:20170702193601p:plain

2. ヘッダのインクルードディレクトリとlibのディレクトリを設定する

f:id:kagasu:20170702193940p:plain

3. サンプルを実行する

f:id:kagasu:20170702194059p:plain

Windows 10 ナビゲーションウィンドウの邪魔なフォルダを消す

Ⅰ.はじめに

私個人としては「ビデオ」「ピクチャ」「ドキュメント」といったフォルダは頻繁に使用しないため非常に邪魔です。

消し方

1. 以下のテキストをx.regという名前をつけて保存し、実行する。
Windows Registry Editor Version 5.00

; Desktop
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}]
; Download
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{088e3905-0323-4b02-9826-5d99428e115f}]
; Picture
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{24ad3ad4-a569-4530-98e1-ab02f9417aa8}]
; Music
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}]
; Document
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{d3162b92-9365-467a-956b-92703aca08af}]
; Video
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}]
2. 邪魔な項目が消えます。