System.IndexOutOfRangeException:'索引超出了数组的范围。

时间:2017-05-22 08:40:43

标签: c# bots twitch

首先 - 我知道这个问题已被提出。我几乎不知道C#还在学习,很多代码来自一个教程,所以我希望能否直接回答我的实际代码。我正在做一个抽搐机器人。

 private void ViewListUpdate()
    {
        ViewerBox.Items.Clear();
        Chatters AllChatters = ChatClient.GetChatters("name");
        chatBox.Text += "Checking the viewer list...";

        foreach (string admin in AllChatters.Admins)
        {
            ViewerBox.Items.Add(admin + Environment.NewLine);
        }

        foreach (string staff in AllChatters.Staff)
        {
            ViewerBox.Items.Add(staff + Environment.NewLine);
        }

        foreach (string globalmod in AllChatters.GlobalMods)
        {
            ViewerBox.Items.Add(globalmod + Environment.NewLine);
        }

        foreach (string moderator in AllChatters.Moderators)
        {
            ViewerBox.Items.Add(moderator + Environment.NewLine);
        }

        foreach (string viewers in AllChatters.Viewers)
        {
            ViewerBox.Items.Add(viewers + Environment.NewLine);
        }
    }

获取错误的行(System.IndexOutOfRangeException:'索引超出了数组的范围。')如下:

Chatters AllChatters = ChatClient.GetChatters("name");

任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:0)

已编译的DLL

我已经为您生成了一个已编译的DLL,您可以下载并添加到您的项目中。你可以在这里找到:https://dropfile.to/9hzvwVX(已更新)

现在您可以为这样的频道获取用户:

var dataClient = new TwitchTmiClient();
var chatters = dataClient.GetChannelViewers("someTwitchChannelName");

Chatters现在将包含活动频道中的用户列表,按等级(admin,mod,viewer等)分隔。

<强>解释

由于此问题与我的个人兴趣相关,因此我决定将您要查找的功能添加到我在评论中发布的图书馆:https://github.com/michidk/TwitchCSharp

当然,下载文件总是有点粗略。所以我所做的是添加一个新的Twitch客户端实现,因为聊天数据不存储在Twitch Kraken API上,而是存储在旧的https://tmi.twitch.tv API上。

namespace TwitchCSharp.Clients
{
    public class TwitchTmiClient : ITwitchClient
    {
        public readonly RestClient restClient;

        public TwitchTmiClient(string url = TwitchHelper.TwitchTmiUrl)
        {
            restClient = new RestClient(url);
            restClient.AddHandler("application/json", new DynamicJsonDeserializer());
            restClient.AddHandler("text/html", new DynamicJsonDeserializer());
            restClient.AddDefaultHeader("Accept", TwitchHelper.twitchAcceptHeader);
        }
        public ViewerList GetChannelViewers(string channel)
        {
            var request = new RestRequest("group/user/{channel}/chatters");
            request.AddUrlSegment("channel", channel.ToLower());
            return restClient.Execute<ViewerList>(request).Data;
        }

        public RestRequest GetRequest(string url, Method method)
        {
            return new RestRequest(url, method);
        }

    }
}

这个新的Twitch客户端使用两个模型将json反序列化为:

namespace TwitchCSharp.Models
{
    public class ViewerList
    {
        [JsonProperty("_links")]
        public Dictionary<string, string> Links;
        [JsonProperty("chatter_count")]
        public int ChatterCount;
        [JsonProperty("chatters")]
        public Chatter Chatters;
    }
}

...

namespace TwitchCSharp.Models
{
    public class Chatter
    {
        [JsonProperty("moderators")] public string[] Moderators;
        [JsonProperty("staff")] public string[] Staff;
        [JsonProperty("admins")] public string[] Admins;
        [JsonProperty("global_mods")] public string[] GlobalMods;
        [JsonProperty("viewers")] public string[] Viewers;
    }
}

您可以在此处找到可以查看所有更改的存储库:https://github.com/nbokmans/TwitchCSharp/commit/ec38eecf1d0fbcb0b75c5de597a44582a61deb3d

如果您愿意,可以git clone在存储库上方并在Visual Studio中打开它以自行构建它。