Ejemplo n.º 1
0
 public void Exit(ICitroid citroid)
 {
     File.WriteAllText("lengthBrain.json", JsonConvert.SerializeObject(lengthBrain, Formatting.Indented));
     File.WriteAllText("wordBrain.json", JsonConvert.SerializeObject(wordBrain, Formatting.Indented));
     File.WriteAllText("NazoBrainConfig.json", JsonConvert.SerializeObject(config, Formatting.Indented));
     _tagger?.Dispose();
 }
Ejemplo n.º 2
0
 public async Task InitializeAsync(ICitroid citroid)
 {
     if (File.Exists("lengthBrain.json"))
     {
         lengthBrain = JsonConvert.DeserializeObject <List <int> >(File.ReadAllText("lengthBrain.json"));
     }
     if (File.Exists("wordBrain.json"))
     {
         wordBrain = JsonConvert.DeserializeObject <Dictionary <string, Word> >(File.ReadAllText("wordBrain.json"));
     }
     if (File.Exists("NazoBrainConfig.json"))
     {
         config = JsonConvert.DeserializeObject <NazoBrainConfig>(File.ReadAllText("NazoBrainConfig.json"));
     }
     if (lengthBrain == null)
     {
         lengthBrain = new List <int>();
     }
     if (wordBrain == null)
     {
         wordBrain = new Dictionary <string, Word>();
     }
     if (config == null)
     {
         config = new NazoBrainConfig();
     }
     _tagger = MeCabTagger.Create();
     _tagger.OutPutFormatType = "wakati";
 }
Ejemplo n.º 3
0
        public async Task LearnFromSlack(ICitroid citroid)
        {
            JObject list = await citroid.RequestAsync("channels.list");

            //Console.WriteLine(list.ToString());
            foreach (JObject ch in list["channels"].Values <JObject>())
            {
                var     id      = ch["id"].Value <string>();
                JObject history = await citroid.RequestAsync("channels.history", new NameValueCollection
                {
                    { "channel", id ?? "" }
                });

                foreach (JObject mes in history.GetValue("messages").Values <JObject>())
                {
                    var subtype = mes["subtype"]?.Value <string>();
                    if (subtype == "bot_message")
                    {
                        continue;
                    }
                    //if (mes["user"] != null && citroid.GetUser(mes["user"].Value<string>()) == "citrine")

                    Learn(mes["text"].Value <string>(), DateTime.UtcNow);
                }
            }
        }
Ejemplo n.º 4
0
        public async Task RunAsync(Message mes, ICitroid citroid)
        {
            foreach (KeyValuePair <string, Word> ws in WordBrain.ToList())
            {
                if ((DateTime.UtcNow - ws.Value.TimeStamp).TotalHours > WORD_LIFE_SPAN)
                {
                    WordBrain.Remove(ws.Key);
                }
            }

            //LOG
            var username = (mes.user == null ? mes.username : citroid.GetUser(mes.user));

            Console.WriteLine($"{username}@{mes.channel} : {mes.text}");
            if (Regex.IsMatch(mes.text, $"<@({citroid.Id}|citroid)>"))
            {
                mes.text = mes.text.Replace($"<@{citroid.Id}> ", "").Replace($"<@{citroid.Id}>", "");
                if (isActive && (mes.text.Contains("ぼんぼやーじゅ") || mes.text.Contains("ばいばい")))
                {
                    if (username == Citroid.ParentName)
                    {
                        // 反抗期卒業

                        //if (r.Next(0) == 0)
                        //{
                        //	await citroid.PostAsync(mes.channel, $"うるせえ!", userName: "******", iconEmoji: ":anger:");
                        //	return;
                        //}
                        await citroid.PostAsync(mes.channel, $"落ちますノシ");

                        await citroid.PostAsync(mes.channel, $"*Citroid が退室しました*");

                        isActive = false;
                    }
                    else
                    {
                        await citroid.PostAsync(mes.channel, $"<@{username}> は親じゃないなー");
                    }
                    return;
                }
                else if (!isActive && (mes.text.Contains("かむひーや") || mes.text.Contains("おいで")))
                {
                    if (username == Citroid.ParentName)
                    {
                        await citroid.PostAsync(mes.channel, $"*Citroid が入室しました*");

                        await citroid.PostAsync(mes.channel, $"Yo");

                        isActive = true;
                    }
                    return;
                }
                else if (isActive && mes.text.Contains("注意喚起"))
                {
                    // 警告防止
                    Task <Task> @void = Task.Factory.StartNew(async() =>
                    {
                        // ゆうさく注意喚起シリーズ
                        PostedMessage post = await citroid.PostAsync(mes.channel, ":simple_smile:" + new string(' ', 20) + ":bee:");
                        for (var i = 19; i >= 0; i -= 2)
                        {
                            // ビンにかかるだいたいの時間
                            await Task.Delay(150);

                            post = await post.UpdateAsync(":simple_smile:" + new string(' ', i) + ":bee:");
                        }
                        // ビンにかかるだいたいの時間
                        await Task.Delay(330);

                        post = await post.UpdateAsync(":simple_smile:");
                        // チクにかかるだいたいの時間
                        await Task.Delay(1000);

                        post = await post.UpdateAsync(":scream:");
                        // アアアアアアアアアア にかかるだいたいの時間
                        await Task.Delay(2000);

                        post = await post.UpdateAsync(":upside_down_face:");
                        //アーイクッ にかかるだいたいの時間
                        await Task.Delay(1000);

                        post = await post.UpdateAsync(":skull:");
                        //チーン (ウ ン チ ー コ ン グ) にかかるだいたいの時間
                        await Task.Delay(2000);

                        //背景が黒くなって3人に増えて音が流れて注意喚起する処理
                        post = await post.UpdateAsync(@"スズメバチには気をつけよう!
      :simple_smile::simple_smile::simple_smile:");
                    });
                    return;
                }
                await Task.Delay(1000);

                if (isActive)
                {
                    await citroid.PostAsync(mes.channel, $"<@{username}> {Say(mes.text)}");
                }
            }
            else if (!config.ReplyOnly && config.PostRate > 0 && r.Next((int)(1 / config.PostRate)) == 0)
            {
                mes.text = mes.text.Replace($"<@{citroid.Id}>", "");
                await Task.Delay(2000);

                if (isActive)
                {
                    await citroid.PostAsync(mes.channel, Say(mes.text));
                }
            }
            if (mes.subtype != "bot_message")
            {
                Learn(mes.text, long.Parse(mes.ts.Split('.')[0]).ToDateTime());
            }
        }