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(); }
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"; }
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); } } }
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()); } }