2017-03-16 5 views
-1

Im Grunde, was ich suche, ist eine Möglichkeit, einen Kanalnamen wie Ankündigungen zu finden und eine Nachricht an ihn zu senden. Ich weiß, wie eine Nachricht zu senden, wenn ein Benutzer eine Nachricht durch Zwietracht sendet oder wenn ein Ereignis geschieht in ZwietrachtSenden einer Nachricht an Discord Channel ohne Nachricht vom Benutzer

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

aber ich suche eine Nachricht zu senden, wenn ein Ereignis auf Twitch passiert.

Mein aktueller-Code ist dies:

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 
    } 

Die Datei, wo ich den Code aus bin ziehen:

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; 
      } 
     } 
    } 
} 
+0

@caesay, Geck, Sie denke immer, dass ich nicht die *** aus dieser recherchiert und kippe es finden, wenn ihr nur ohne Eingabe in die Zwietracht gesendet werden. Ich habe in meiner Frage gesagt, dass ich es im vorherigen nicht für mich kodieren wollte. Ich wollte nur jemanden, der mir hilft, es zu erklären, damit ich lernen kann. Ich bin bei etwas hängengeblieben und versuche jetzt Hilfe bei einer bestimmten Codezeile zu bekommen. Wörtlich wie man den Kanal ohne Eingabe vom Benutzer bekommt. –

Antwort

1

Sie müssen nur für den Kanal suchen, die docuementation für die Bibliothek ist hier : http://rtd.discord.foxbot.me/

Es gibt keinen Grund, alle Twitch-Antwortobjekte zu enthalten, wenn wir nur nach einer bestimmten Eigenschaft suchen (wenn der Kanal lebt oder nicht). Es ist ziemlich einfach, einen JSON-Baum zu durchlaufen und nach einem bestimmten Gegenstand zu suchen.

Ich habe das Problem in dem unten stehenden Code abgeschlossen und hinzugefügt Kommentare für Sie in der Hoffnung, dass es Ihnen helfen kann zu lernen. Fügen Sie den folgenden Code in Program.cs einer Konsolenanwendung ein.

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; 
    } 
} 
+0

Vielen Dank. Ich werde den Code nicht kopieren, wenn mein Zeug nicht funktioniert, weil ich nicht nur einen ganzen Abschnitt kopieren möchte. Ich versuche zu verstehen, wie der Discord-Abschnitt funktioniert. Und es ist nicht so, dass ich schlecht in der Forschung bin, es ist, dass ich C# nicht gut genug kenne, um die Githubs zu dekodieren und zu verstehen. Deshalb komme ich hierher, um nach einer Anleitung zu fragen. Entschuldige, wenn ich so faul komme. Aber hinter den Kulissen versuche ich zu lernen, aber ich benutze dieses Programm, um zu lernen. Vielen Dank für den Abschnitt, der den Server und den Kanal findet. Ich habe das übernommen –

+0

Ich weiß, dass dies vor mehr als einem Jahr passiert ist, und das ist eigentlich nichts zu tun, was ich will - aber Sie gingen die extra Meile für Zack und er hat Sie nicht upvote ... Also werde ich: P –

0

Sie, dass nur bei der Verwendung dieser Code tun können:

var channelName = client.GetChannel(channelID); 
channelName.SendMessage("test"); 

-> channel nur der Variablenname des Kanals ist, können Sie es nennen everythig Sie

wollen -> Client ist der Name des DiscordClient, und ich sehe, dass Sie es Client genannt haben, also habe ich das hier benutzt.

-> KanalID ist die ID des Kanals, an den die Nachricht gesendet werden soll. Sie können eine Kanal-ID abrufen, indem Sie den Entwicklermodus in Discord aktivieren.

Oder kürzer:

client.GetChannel(channelID).SendMessage("test"); 
Verwandte Themen