public static async Task Main(string[] args) { if (File.Exists("persist.json")) { Time = JObject.Parse(File.ReadAllText("persist.json"))["Time"].Value <int>(); } var channelname = "kkcomics"; var TwitchHttpsAPI = new TwitchAPI(Environment.GetEnvironmentVariable("TWITCH_OAUTH")); var channelId = TwitchHttpsAPI.GetIdOfChannel(channelname); var ChatAPI = new ChatAPI( server: "irc.chat.twitch.tv", password: $"oauth:{TwitchHttpsAPI.OAuth}", channel: channelname, username: TwitchHttpsAPI.Login ); var CancelLoopSourceChat = new CancellationTokenSource(); var ChatTask = new Task(() => ChatAPI.HandleEventLoop(), CancelLoopSourceChat.Token, TaskCreationOptions.LongRunning); var ps = new PubSub(channelId, TwitchHttpsAPI.OAuth, ChatAPI); await ps.Connect(); var CancelLoopSourcePubSub = new CancellationTokenSource(); var PubSubTask = new Task(() => ps.Subscribe(), CancelLoopSourcePubSub.Token, TaskCreationOptions.LongRunning); var main = new ManualResetEvent(false); ChatTask.Start(); PubSubTask.Start(); var t = new System.Threading.Timer((o) => { bool active = Time != 0; if (Time > 0) { Time--; } else if (Time < 0) { Time++; } var absTime = Math.Abs(Time); if ((absTime == 0 && active) || absTime == 60 || absTime % 600 == 0) { ChatAPI.SendDehydrationUpdate(); } }, null, 0, 1000); #if DEBUG ChatAPI.SendMessageInChannel($"MrDestructoid This is a Test {Guid.NewGuid()} MrDestructoid"); #else ChatAPI.SendMessageInChannel("Dehyrdation Bot online MrDestructoid"); #endif main.WaitOne(); }
public PubSub(string channelId, string authToken, ChatAPI chatAPI) { this.ChatAPI = chatAPI; this.authToken = authToken; this.channelId = channelId; client = new WebsocketClient(url); client.MessageReceived.Subscribe(OnMessageReceived); pingTimer = new System.Timers.Timer(4.5 * 60 * 1000); pingTimer.AutoReset = true; pingTimer.Elapsed += PingTimerElapsed; pongTimer = new System.Timers.Timer(10 * 1000) { AutoReset = false, Enabled = false }; pongTimer.Elapsed += (o, e) => { if (!pongHappened) { throw new InvalidOperationException("Did not receive PONG in time"); } }; }