ユーザーからのメッセージなしで Discord チャンネルにメッセージを送信する

ザック・アーネット

基本的に私が探しているのは、アナウンスなどのチャンネル名を見つけてメッセージを送信する方法です。ユーザーがdiscordを通じてメッセージを送信するたびに、またはdiscordでイベントが発生した場合にメッセージを送信する方法を知っています

e.Server.FindChannels("Channel Name").FirstorDefault;
await channel.sendmessage(string.Format("Message"))

しかし、Twitch でイベントが発生したときにメッセージを送信したいと考えています。

私の現在のコードはこれです:

TwitchAPIexample.RootObject json = TwitchAPIexample.BuildConnect();

    if (TwitchAPIexample.TwitchLive(json))
    {
        var channel = client.GetChannel("announcements"); //Where I need to get channel
        //Where I need to send message to channel
    }

コードをプルしているファイル:

using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace MyFirstBot.Plugins
{
    public class TwitchAPIexample
    {

        private const string url = "https://api.twitch.tv/kraken/streams/channel";

        public bool isTwitchLive = true;

        public static RootObject BuildConnect()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "Get";
            request.Timeout = 12000;
            request.ContentType = "application/json";
            request.Headers.Add("authorization", "Token");

            using (System.IO.Stream s = request.GetResponse().GetResponseStream())
            {
                using (StreamReader sr = new System.IO.StreamReader(s))
                {
                    var jsonResponse = sr.ReadToEnd();
                    RootObject r = JsonConvert.DeserializeObject<RootObject>(jsonResponse);
                    return r;
                }
            }
        }


        public class Preview
        {
            public string small { get; set; }
            public string medium { get; set; }
            public string large { get; set; }
            public string template { get; set; }
        }

        public class Channel
        {
            public bool mature { get; set; }
            public string status { get; set; }
            public string broadcaster_language { get; set; }
            public string display_name { get; set; }
            public string game { get; set; }
            public string language { get; set; }
            public int _id { get; set; }
            public string name { get; set; }
            public string created_at { get; set; }
            public string updated_at { get; set; }
            public bool partner { get; set; }
            public string logo { get; set; }
            public string video_banner { get; set; }
            public string profile_banner { get; set; }
            public object profile_banner_background_color { get; set; }
            public string url { get; set; }
            public int views { get; set; }
            public int followers { get; set; }
        }

        public class Stream
        {
            public long _id { get; set; }
            public string game { get; set; }
            public int viewers { get; set; }
            public int video_height { get; set; }
            public int average_fps { get; set; }
            public int delay { get; set; }
            public string created_at { get; set; }
            public bool is_playlist { get; set; }
            public Preview preview { get; set; }
            public Channel channel { get; set; }
        }

        public class RootObject
        {
            public Stream stream { get; set; }
        }

        public static bool TwitchLive(RootObject stream)
        {
            TwitchAPIexample twitch = new TwitchAPIexample();
            string test = stream.stream.ToString();
            if(test == null)
            {
                twitch.isTwitchLive = false;
                return false;
            }
            else if(test != null & twitch.isTwitchLive == false)
            {
                twitch.isTwitchLive = true;
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
シーセイ

チャンネルを検索するだけで、ライブラリのドキュメントがここにあります: http://rtd.discord.foxbot.me/

特定のプロパティのみをチェックしている場合 (チャネルが生きているかどうか)、すべての twitch 応答オブジェクトを含める理由はありません。JSON ツリーを走査して特定の項目を探すのは非常に簡単です。

以下のコードの問題を完成させ、学習に役立つことを願ってコメントを追加しました。次のコードをProgram.csコンソール アプリケーションに貼り付けます。

static void Main(string[] args)
{
    DiscordClient client = null;
    // initialize client etc here.

    string twitchStreamId = "";
    string twitchApiKey = "";
    string discordServerName = "";
    string discordChannelName = "";

    // find discord channel
    var server = client.FindServers(discordServerName).FirstOrDefault();
    var channel = server.FindChannels(discordChannelName, ChannelType.Text).FirstOrDefault();

    var lastTwitchStatus = CheckTwitchStatusIsOnline(twitchStreamId, twitchApiKey);

    // send a message on startup always
    SendDiscordChannelMessage(channel, lastTwitchStatus);

    while (true)
    {
        // check the status every 10 seconds after that and if the status has changed we send a message
        Thread.Sleep(10000);

        var status = CheckTwitchStatusIsOnline(twitchStreamId, twitchApiKey);

        // if the status has changed since the last time we checked, send a message
        if (status != lastTwitchStatus)
            SendDiscordChannelMessage(channel, status);

        lastTwitchStatus = status;
    }
}

private static void SendDiscordChannelMessage(Channel channel, bool twitchIsOnline)
{
    channel.SendMessage(twitchIsOnline ? "Twitch channel is now live!!" : "Twitch channel is now offline :(");
}

private static bool CheckTwitchStatusIsOnline(string streamId, string twitchApiKey)
{
    // send a request to twitch and check whether the stream is live.
    var url = "https://api.twitch.tv/kraken/streams/" + streamId;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.Timeout = 12000;
    request.ContentType = "application/json";
    request.Headers.Add("authorization", twitchApiKey);

    using (var sr = new StreamReader(request.GetResponse().GetResponseStream()))
    {
        var jsonObject = JObject.Parse(sr.ReadToEnd());
        var jsonStream = jsonObject["stream"];

        // twitch channel is online if stream is not null.
        var twitchIsOnline = jsonStream.Type != JTokenType.Null;
        return twitchIsOnline;
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Discord.jsが特定のチャネルにメッセージを送信する

分類Dev

discord.jsが特定のチャネルにメッセージを送信する

分類Dev

Discord.js特定のチャネルにメッセージを送信する

分類Dev

discord.pyで、作成したばかりのチャンネルでメッセージを送信する方法は?

分類Dev

チャネルを指定するメッセージの送信/ Python Discord

分類Dev

discord.jsを使用して最初のチャネルにメッセージを送信する

分類Dev

discord.ioを使用して特定のチャネルにメッセージを送信する

分類Dev

discord.pyを使用して特定のチャネルにメッセージを送信する

分類Dev

コンテキストなしで現在のチャネルにメッセージを送信しますか?| discord.pyの書き換え

分類Dev

Discord Py、IDを介して任意のチャネルでメッセージを送信する

分類Dev

すべてのチャネルにメッセージを送信する— Discord.py

分類Dev

Discordボットが特定のチャネルで送信した以前のメッセージを削除するにはどうすればよいですか?

分類Dev

ユーザーが特定の音声チャネルに参加したときに特定のチャネルに埋め込まれたメッセージを送信するdiscord.pyボットを作成する方法

分類Dev

メッセージで言及したユーザーのプロフィール写真を送信する-discord.py

分類Dev

メッセージで言及したユーザーのプロフィール写真を送信する-discord.py

分類Dev

Discord Botは、「ユーザーがチャネルに固定したメッセージ」メッセージを削除します。

分類Dev

著者が音声チャネルにいない場合、discord.pyはメッセージを送信します

分類Dev

discord.jsはチャネルの問題ごとにメッセージを送信します

分類Dev

Discord.pyボットに特定のチャネルにメッセージを送信させる方法

分類Dev

メッセージを送信する特定のチャネル名を検索するDiscord.js(ログ)

分類Dev

discord.pyを使用してシステムメッセージチャネルでグリーティングメッセージを送信するにはどうすればよいですか?

分類Dev

Discord-PythonアプリからDiscordチャネルにのみメッセージを送信します(一方向通信)

分類Dev

不和チャンネルdiscord.pyにメッセージを送信できません

分類Dev

別のチャンネル(Discord.py)で送信されたメッセージを削除することは可能ですか?

分類Dev

特定のギルドの特定のチャンネルでメッセージを編集する| Discord.js

分類Dev

discord-apiチャネルからすべてのメッセージを取得する

分類Dev

discord.pyメッセージの反応からランダムなユーザーを選ぶ

分類Dev

discord.pyを使用して指定されたチャネルにメッセージを送信するときにエラーが発生しました

分類Dev

Discord.pyでのユーザーメッセージの削除

Related 関連記事

  1. 1

    Discord.jsが特定のチャネルにメッセージを送信する

  2. 2

    discord.jsが特定のチャネルにメッセージを送信する

  3. 3

    Discord.js特定のチャネルにメッセージを送信する

  4. 4

    discord.pyで、作成したばかりのチャンネルでメッセージを送信する方法は?

  5. 5

    チャネルを指定するメッセージの送信/ Python Discord

  6. 6

    discord.jsを使用して最初のチャネルにメッセージを送信する

  7. 7

    discord.ioを使用して特定のチャネルにメッセージを送信する

  8. 8

    discord.pyを使用して特定のチャネルにメッセージを送信する

  9. 9

    コンテキストなしで現在のチャネルにメッセージを送信しますか?| discord.pyの書き換え

  10. 10

    Discord Py、IDを介して任意のチャネルでメッセージを送信する

  11. 11

    すべてのチャネルにメッセージを送信する— Discord.py

  12. 12

    Discordボットが特定のチャネルで送信した以前のメッセージを削除するにはどうすればよいですか?

  13. 13

    ユーザーが特定の音声チャネルに参加したときに特定のチャネルに埋め込まれたメッセージを送信するdiscord.pyボットを作成する方法

  14. 14

    メッセージで言及したユーザーのプロフィール写真を送信する-discord.py

  15. 15

    メッセージで言及したユーザーのプロフィール写真を送信する-discord.py

  16. 16

    Discord Botは、「ユーザーがチャネルに固定したメッセージ」メッセージを削除します。

  17. 17

    著者が音声チャネルにいない場合、discord.pyはメッセージを送信します

  18. 18

    discord.jsはチャネルの問題ごとにメッセージを送信します

  19. 19

    Discord.pyボットに特定のチャネルにメッセージを送信させる方法

  20. 20

    メッセージを送信する特定のチャネル名を検索するDiscord.js(ログ)

  21. 21

    discord.pyを使用してシステムメッセージチャネルでグリーティングメッセージを送信するにはどうすればよいですか?

  22. 22

    Discord-PythonアプリからDiscordチャネルにのみメッセージを送信します(一方向通信)

  23. 23

    不和チャンネルdiscord.pyにメッセージを送信できません

  24. 24

    別のチャンネル(Discord.py)で送信されたメッセージを削除することは可能ですか?

  25. 25

    特定のギルドの特定のチャンネルでメッセージを編集する| Discord.js

  26. 26

    discord-apiチャネルからすべてのメッセージを取得する

  27. 27

    discord.pyメッセージの反応からランダムなユーザーを選ぶ

  28. 28

    discord.pyを使用して指定されたチャネルにメッセージを送信するときにエラーが発生しました

  29. 29

    Discord.pyでのユーザーメッセージの削除

ホットタグ

アーカイブ