コード例 #1
0
        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;
                                }
                            }));
                        }
コード例 #2
0
        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.");
        }
コード例 #3
0
 public InfluxDbClientWriter(InfluxDBClient client, BufferedChannelOptions options)
 {
     _api     = client.GetWriteApi();
     _channel = new BufferedChannel <PointData>(options);
     _channel.RegisterConsumer(SendDataPoints);
 }