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); } }
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)); }
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); }
public StatisticManager(WatchedChannel channel) { Channel = channel; _updateTask = Task.Run(() => UpdateThread(_updateThreadTokenSource.Token)); }