Пример #1
0
 private string NullCharFilter(string v)
 {
     // その単語の子要素にnull文字がなければ入力そのままで返す
     if (!(wordBrain[v].Candidates.FirstOrDefault(c => c.MyText == "\0") is WordCandidate wc))
     {
         return(v);
     }
     if (!(wc.Candidates.Random() is WordCandidateChild wcc))
     {
         return(v);
     }
     if (!WordBrain.ContainsKey(wcc.MyText))
     {
         return(v);
     }
     return(wcc.MyText);
 }
Пример #2
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());
            }
        }