在没有用户消息的情况下向 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 条评论
登录 后参与评论

相关文章

是否可以使discord.py机器人在没有用户触发的情况下向用户发送私人消息?

在没有上下文的情况下向当前频道发送消息?| discord.py重写

Discord py 向频道发送消息

向所有频道发送消息— Discord.py

如何使用 Discord.py 向特定频道发送消息?

discord.py- 如何向随机频道发送消息?

每当删除消息时都会向频道发送消息的 Discord 机器人。Discord.js

使用JDA在Discord中将消息发送到特定频道

Discord.js将消息发送到特定频道

discord.py 在特定时间发送频道消息

discord.js将消息发送到特定频道

Python - Discord bot 准备好向频道发送消息

Discord Py将消息发送到特定频道

Discord.js发送消息到特定频道

Discord.py:消息未发送到频道

Discord js 找不到发送错误消息的频道

消息未在频道中发送 discord.js

discord.js 在特定频道上发送消息

在没有任何事件的情况下向频道发送消息

特定 Discord 频道中的消息

如何让 Discord 机器人在创建时向特定频道发送消息?

Discord.js bot 向其所在的每个服务器中的特定频道发送消息

如何向指定频道发送消息 - Discord.js v13 TypeScript

尝试从不同的文件 discord.py 向特定频道发送消息

如何在没有命令的情况下使用discord.py发送消息

检查用户是否可以在特定频道中发送消息discord.js

Discord.js 尝试在用户加入语音频道时发送消息

将所有消息发送到discord js中的特定频道

我的代码有效,但是是否有命令可以在没有用户确认的情况下真正发送 whatsapp 消息?