Example #1
0
        private void ConnectToChannel(WatchedChannel channel)
        {
            if (!_channelProcessors.ContainsKey(channel.Name))
            {
                _channelProcessors[channel.Name] = new ChannelProcessor(channel, _settings);
            }

            if (!HasJoinedChannel(channel.Name))
            {
                Client.JoinChannel(channel.Name);
            }
        }
Example #2
0
        public ChannelProcessor(WatchedChannel channel, BotSettings settings)
        {
            this.Channel  = channel;
            this.Settings = settings;

            this._statisticManager = new StatisticManager(channel);
            this._resolveHelper    = new ResolveHelper();

            this._chatCommandHandler = new ChatCommandHandler(channel, this);

            IsBroadcasting = CheckIsBroadcasting();

            _updateTask = Task.Run(() => UpdateThread(_updateThreadTokenSource.Token));
        }
Example #3
0
        private List <WatchedChannel> LoadWatchedChannels()
        {
            var watchedChannels = new Dictionary <string, WatchedChannel>();

            try
            {
                using (var command = new MySqlCommand("SELECT bwc.channel_id, btn.telegram_channel_id, bwc.commands_enabled != 0, bwc.install_date FROM bot_watched_channels bwc " +
                                                      "LEFT JOIN bot_telegram_notify btn ON bwc.channel_id = btn.channel_id AND bwc.bot_id = btn.bot_id " +
                                                      "WHERE bwc.bot_id = @bot_id AND bwc.enabled != 0", DbConnection.GetConnection()))
                {
                    command.Parameters.AddWithValue("@bot_id", _settings.Id);

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var channelId = reader.GetString(0);

                            if (watchedChannels.TryGetValue(channelId, out var channel))
                            {
                                if (!reader.IsDBNull(1))
                                {
                                    channel.TelegramNotifyChannels.Add(reader.GetString(1));
                                }
                            }
                            else
                            {
                                channel = new WatchedChannel
                                {
                                    BotId           = _settings.Id,
                                    Id              = channelId,
                                    CommandsEnabled = reader.GetBoolean(2),
                                    InstallDate     = reader.GetInt32(3),
                                };
                                if (!reader.IsDBNull(1))
                                {
                                    channel.TelegramNotifyChannels.Add(reader.GetString(1));
                                }

                                watchedChannels[channelId] = channel;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Instance.Error($"Faled to load watched channels: {e.Info()}");

                return(new List <WatchedChannel>());
            }

            var channels = watchedChannels.Select(_ => _.Value).ToList();

            foreach (var channel in channels)
            {
                try
                {
                    var res = ApiPool.GetApi().V5.Channels.GetChannelByIDAsync(channel.Id).Result;
                    if (res == null)
                    {
                        Logger.Instance.Warn($"Failed to resolve channel with id '{channel.Id}");
                        continue;
                    }

                    channel.Name = res.Name.ToLower();
                }
                catch (Exception e)
                {
                    Logger.Instance.Error($"Failed to add watched channel: {e.Info()}");
                    continue;
                }
            }

            return(channels);
        }
Example #4
0
        public StatisticManager(WatchedChannel channel)
        {
            Channel = channel;

            _updateTask = Task.Run(() => UpdateThread(_updateThreadTokenSource.Token));
        }