コード例 #1
0
ファイル: ChatbotService.cs プロジェクト: Farami/CodedChatbot
        public async void Main()
        {
            var firstRun = true;

            while (true)
            {
                if (firstRun && Channel?.Id != null)
                {
                    // Align database with any potentially missed or offline follows/subs
                    // var followers = await api.Channels.v5.GetAllFollowersAsync(Channel.Id);
                    try
                    {
                        var subs = await api.Channels.v5.GetAllSubscribersAsync(Channel.Id, config.ChatbotAccessToken);

                        // TODO: Need to consider length of sub in db alignment
                        vipHelper.StartupSubVips(subs);
                    }
                    catch (NotPartneredException)
                    {
                        Console.Out.WriteLine("Not a partner. Skipping sub setup.");
                    }

                    // VipHelper.StartupFollowVips(followers);

                    // Set threads for sending out stream info to the chat.
                    HowToRequestTimer = new Timer(
                        e => commandHelper.ProcessCommand("howtorequest", client, "Chatbot", string.Empty, true),
                        null,
                        TimeSpan.Zero,
                        TimeSpan.FromMinutes(25));
                    CustomsForgeTimer = new Timer(
                        e => commandHelper.ProcessCommand("customsforge", client, "Chatbot", string.Empty, true),
                        null,
                        TimeSpan.FromMinutes(5),
                        TimeSpan.FromMinutes(25));
                    FollowTimer = new Timer(
                        e => commandHelper.ProcessCommand("followme", client, "Chatbot", string.Empty, true),
                        null,
                        TimeSpan.FromMinutes(10),
                        TimeSpan.FromMinutes(25));
                    DiscordTimer = new Timer(
                        e => commandHelper.ProcessCommand("discord", client, "Chatbot", string.Empty, true),
                        null,
                        TimeSpan.FromMinutes(15),
                        TimeSpan.FromMinutes(25));
                    TwitterTimer = new Timer(
                        e => commandHelper.ProcessCommand("twitter", client, "Chatbot", string.Empty, true),
                        null,
                        TimeSpan.FromMinutes(20),
                        TimeSpan.FromMinutes(25));

                    // Set thread for checking viewers in chat and giving out Bytes.

                    BytesTimer = new Timer(
                        async e =>
                    {
                        try
                        {
                            var currentChattersJson = await httpClient.GetStringAsync($"https://tmi.twitch.tv/group/user/{config.StreamerChannel}/chatters");
                            // process json into username list.
                            var chattersModel = JsonConvert.DeserializeObject <ChatViewersModel>(currentChattersJson);
                            Console.Out.WriteLine(currentChattersJson);
                            bytesHelper.GiveBytes(chattersModel);
                        }
                        catch (Exception ex)
                        {
                            Console.Out.WriteLine(ex.ToString());
                        }
                    },
                        null,
                        TimeSpan.Zero,
                        TimeSpan.FromMinutes(1));

                    // Set thread for checking for any new Donations from streamlabs and synchronise with the db.
                    // Commenting out so bot can be used.

                    /*
                     * DonationsTimer = new System.Threading.Timer(
                     *  async e =>
                     *  {
                     *      try
                     *      {
                     *          var vals = new Dictionary<string, string>
                     *          {
                     *              { "grant_type", "authorization_code" },
                     *              { "client_id", config.StreamLabsClientId },
                     *              { "client_secret", config.StreamLabsClientSecret },
                     *              { "redirect_uri", "localhost" },
                     *              { "code", config.StreamLabsCode }
                     *          };
                     *          var content = new FormUrlEncodedContent(vals);
                     *          var tokenResponse = await httpClient.PostAsync("https://streamlabs.com/api/v1.0/token", content);
                     *          var tokenJsonString = await tokenResponse.Content.ReadAsStringAsync();
                     *          var tokenModel = JsonConvert.DeserializeObject<TokenJsonModel>(tokenJsonString);
                     *
                     *
                     *
                     *          var donationsJsonString = await httpClient.GetStringAsync($"https://streamlabs.com/api/v1.0/donations?access_token={tokenModel.access_token}");
                     *          var donationsModel = JsonConvert.DeserializeObject<TokenJsonModel>(donationsJsonString);
                     *          var text = "";
                     *
                     *          // NOTES TO SELF. Add &after=<donationId> to end of donations call.
                     *          // This can start at any number (for initialising db) after this it will get anything past whichever donation_id we pass
                     *          // This will ideally always be the latest one, we can then check for empty strings and such to reduce overhead.
                     *      }
                     *      catch (Exception ex)
                     *      {
                     *          Console.Out.WriteLine(ex.ToString());
                     *      }
                     *  },
                     *  null,
                     *  TimeSpan.Zero,
                     *  TimeSpan.FromMinutes(1));
                     */

                    firstRun = false;
                    break;
                }
            }
        }