public async Task <string> FillUserMarkovs(IInvocationContext context) { int linesLearned = 0; string botName = context.OriginClient.Username; foreach (var server in context.OriginClient.Servers) { Parallel.ForEach(server.Channels, channel => { IBufferedChannel bufferedChannel = channel as IBufferedChannel; if (bufferedChannel != null && !bufferedChannel.Name.Contains("homero-dev")) { try { Parallel.ForEach(bufferedChannel.GetLatestMessagesAsync(15000).Result, (message => { if (message.User.Name == botName || string.IsNullOrEmpty(message.Text.Trim()) || message.Text.IsCommand()) { return; } IEntity entity = message.User as IEntity; if (entity != null) { if (!_userModels.ContainsKey(entity.ID)) { _userModels.TryAdd(entity.ID, new StringMarkov(1) { EnsureUniqueWalk = true }); } _userModels.TryGetValue(entity.ID, out StringMarkov markov); markov?.Learn(message.Text); linesLearned += 1; } })); }
public async Task <string> ImiChat(IInvocationContext context) { IBufferedChannel bufferedChannel = context.Channel as IBufferedChannel; if (bufferedChannel != null) { if (!_models.ContainsKey(bufferedChannel.Name)) { StringMarkov markov = new StringMarkov(1) { EnsureUniqueWalk = true }; DateTimeOffset offset = DateTimeOffset.UtcNow; List <IBufferedMessage> messages = await bufferedChannel.GetMessagesAsync(offset, SearchDirection.Before, 5000); markov.Learn(messages.Where(x => x.User.Name != context.OriginClient.Username && !string.IsNullOrEmpty(x.Text?.Trim()) && !x.Text.IsCommand()).Select(x => x.Text)); _models[bufferedChannel.Name] = markov; } return(_models[context.Channel.Name].Walk(10).OrderByDescending(x => x.Length).Take(5).GetRandom()); } throw new Exception("Not buffered channel."); }
public InfluxDbClientWriter(InfluxDBClient client, BufferedChannelOptions options) { _api = client.GetWriteApi(); _channel = new BufferedChannel <PointData>(options); _channel.RegisterConsumer(SendDataPoints); }