Example #1
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (e.GetMessage().Contains("/Genshin"))
            {
                var executor = new CommandExecutor
                {
                    Commands = CommandBases
                };

                var inputCommand = e.GetMessage().ParseCommand();

                try
                {
                    var text = await executor.ExecuteCommand(new CommandUsage
                    {
                        Prefix    = inputCommand[0],
                        MainParam = inputCommand[1],
                        Options   = inputCommand.HasOptions() ? inputCommand.CopyStringArray(2) : null
                    });

                    if (text != null)
                    {
                        await session.SendPlainText(e, text);
                    }
                }
                catch (Exception exception)
                {
                    await session.SendPlainText(e, "请求失败:", exception.Message);
                }
            }

            return(false);
        }
Example #2
0
 public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
 {
     try
     {
         if (e.Chain.Length > 1)
         {
             bool            isReply = false, isAtSource = false;
             IMessageBuilder builder = new MessageBuilder();
             ReplyMessage(e.Chain, builder, e.Sender.Id, ref isReply);
             if (isReply)        //是否回复消息
             {
                 if (isAtSource) //是否@消息源
                 {
                     await session.SendGroupMessageAsync(e.Sender.Group.Id, builder, Convert.ToInt32(e.Chain[0].ToString()));
                 }
                 else
                 {
                     await session.SendGroupMessageAsync(e.Sender.Group.Id, builder);
                 }
             }
         }
     }
     catch
     {
     }
     return(false);
 }
Example #3
0
        public async Task <bool> Accept(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (!Config.ApplyedGroups.Contains(e.Sender.Group.Id) || !Utility.SiglePlainMessageChecker(e))
            {
                return(false);
            }
            if (((PlainMessage)e.Chain[1]).Message.ToLower() != "accept")
            {
                return(false);
            }
            var task = Global.currentTask[e.Sender.Group.Id];

            if (task == null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("当前无挂起的task!"));

                return(false);
            }
            else
            {
                if (!Global.acceptList[e.Sender.Group.Id].Add(e.Sender.Id))
                {
                    await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new PlainMessage("请勿重复确认") },
                                                        ((SourceMessage)e.Chain[0]).Id);

                    return(false);
                }
                //这个顺序是为了保证即使禁言操作抛出了异常,send group message也能正常输出最后一个同步状态而不用写一个丑陋的try-finally块
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage($"同步状态{task.CurrentMemberNum + 1}/{task.MemberNumRequired}"));

                await task.IncreaseCurrentNum();
            }
            return(false);
        }
Example #4
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (e.Chain.Length != 2 || !(e.Chain[1] is PlainMessage))
            {
                return(false);
            }
            var cmd = ((PlainMessage)e.Chain[1]).Message.Split(' ').Where(s => s != string.Empty).ToArray();

            if (!CalenderBot.Config.CommandStart.Contains(cmd[0]))
            {
                return(false);
            }
            var helpMsg = new StringBuilder();

            using var writer = new StringWriter(helpMsg);
            var parser = new Parser(config => config.HelpWriter = writer);
            await parser.ParseArguments <CommandParser.Default,
                                         CommandParser.Config,
                                         CommandParser.GenerateCalender>(cmd.Skip(1))
            .WithParsedAsync <CommandParser.Config>(async with => await ConfigUser.Run(with, session, e)).GetAwaiter().GetResult()
            .WithParsedAsync <CommandParser.GenerateCalender>(async with => await GenerateCalender.Run(with, session, e)).GetAwaiter().GetResult()
            .WithParsedAsync <CommandParser.Default>(async with => await Calender.Run(with, session, e));

            if (helpMsg.Length != 0)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage(helpMsg.ToString()));
            }
            return(false);
        }
Example #5
0
        public async Task <bool> GroupMessage2(MiraiHttpSession session, IGroupMessageEventArgs e) // 法2: 使用 params IMessageBase[]
        {
            IMessageBase plain1 = new PlainMessage($"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}");
            //                                                / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限   /                                                       / 消息链 /
            IMessageBase plain2 = new PlainMessage("QAQ");                                           // 在下边的 SendGroupMessageAsync, 你可以串起n个 IMessageBase
            await session.SendGroupMessageAsync(e.Sender.Group.Id, plain1 /*, plain2, /* etc... */); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                                           // 不阻断消息传递。如需阻断请返回true
        }
Example #6
0
        public static async Task SendPlainText(this MiraiHttpSession session, IGroupMessageEventArgs e, string text)
        {
            var builder = new MessageBuilder();

            builder.AddAtMessage(e.Sender.Id);
            builder.AddPlainMessage(" ");
            builder.AddPlainMessage(text);

            await session.SendGroupMessageAsync(e.Sender.Group.Id, builder);
        }
Example #7
0
        public Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            var text = e.Chain.FirstOrDefault(m => m.Type == "Plain")?.ToString();

            if (text == null)
            {
                return(new Task <bool>(() => false));
            }
            handlers.Where(h => Regex.IsMatch(text, h.Key)).ToList().ForEach(h => h.Value.DoHandleAsync(session, e.Chain, e.Sender));
            return(new Task <bool>(() => false));
        }
Example #8
0
        public static bool ProcessCommandSession(IGroupMessageEventArgs args, out string?processedMsg)
        {
            processedMsg = null;
            if (!SiglePlainMessageChecker(args))
            {
                return(false);
            }
            var ret = ProcessCommandString(((PlainMessage)args.Chain[1]).Message, out processedMsg);

            return(ret);
        }
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            // 临时消息和群消息一致, 不多写例子了
            IMessageBase[] chain = new IMessageBase[]
            {
                new PlainMessage($"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}")
                //                          / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限   /                                                       / 消息链 /
            };
            await session.SendGroupMessageAsync(e.Sender.Group.Id, chain); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                 // 不阻断消息传递。如需阻断请返回true
        }
Example #10
0
        public async Task <bool> GroupMessage3(MiraiHttpSession session, IGroupMessageEventArgs e) // 法3: 使用 IMessageBuilder
        {
            IMessageBuilder builder = new MessageBuilder();

            builder.AddPlainMessage($"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}");
            //                                 / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限   /                                                       / 消息链 /
            // builder.AddPlainMessage("QAQ").AddPlainMessage("QwQ")/* .AddAtMessage(123456) etc... */;
            // 你甚至可以一开始 new MessageBuilder() 的时候就开始 Chaining
            await session.SendGroupMessageAsync(e.Sender.Group.Id, builder /*, plain2, /* etc... */); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                                            // 不阻断消息传递。如需阻断请返回true
        }
Example #11
0
        public async Task <bool> ImageMonitor(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            var chain = e.Chain;

            foreach (var msg in chain)
            {
                if (msg is ImageMessage image)
                {
                    await using var file = new System.IO.StreamWriter("ImageMonitor.txt", true);
                    await file.WriteLineAsync($"{DateTime.Now.ToLongTimeString()} {e.Sender.Group.Id} {e.Sender.Id} {e.Sender.Name} {image.Url}");
                }
            }
            return(false);
        }
Example #12
0
        private async Task <PlainMessage> GroupMessageHandler(IGroupMessageEventArgs e)
        {
            // 只允许特定群
            //if (e.Sender.Group.Id != Setting.GroupId)
            //    return null;
            if (!Setting.GroupIds.Contains(e.Sender.Group.Id))
            {
                return(null);
            }

            $"收到了来自{e.Sender.Name}[{e.Sender.Id}]{{{e.Sender.Permission}}}的群消息:{string.Join(null, (IEnumerable<IMessageBase>)e.Chain)}".LogInfo();
            //     / 发送者群名片 /  / 发送者QQ号 /   /   发送者在群内权限

            return(await _groupHandler.CommandHandler(e));
        }
Example #13
0
        public async Task <bool> MemberKick(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (!Config.ApplyedGroups.Contains(e.Sender.Group.Id))
            {
                return(false);
            }
            string?command;
            bool   iscommand = Utility.ProcessCommandSession(e, out command);

            if (!iscommand)
            {
                return(false);
            }
            var commandArgs = command.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            if (commandArgs.Length != 2 || !memberKickCommandList.Contains(commandArgs[0]))
            {
                return(false);
            }

            long target;

            if (!long.TryParse(commandArgs[1], out target))
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id,
                                                    new IMessageBase[] { new PlainMessage("输入的参数有误") },
                                                    ((SourceMessage)e.Chain[0]).Id);

                return(false);
            }
            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new AtMessage(e.Sender.Id),
                                                                                            new PlainMessage("已有命令注册,请等待被注册命令结束") });

                return(false);
            }

            Global.currentTask[e.Sender.Group.Id] = new MemberKick(target, e.Sender.Group.Id, session);
            await Task.Delay(TimeSpan.FromMinutes(2));

            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("挂起的任务已超时"));
            }
            Global.currentTask[e.Sender.Group.Id] = null;
            return(false);
        }
Example #14
0
        public static async Task <bool> Listener(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            _ = Group.Groups.TryAdd(e.Sender.Group.Id, new Group(e.Sender.Group.Id));
            var curgp = Group.Groups[e.Sender.Group.Id];

            if (curgp.MessageQueue.Count <= curgp.MaxMessageNum)
            {
                curgp.MessageQueue.AddToBack(e);
            }
            else
            {
                curgp.MessageQueue.RemoveFromFront();
                curgp.MessageQueue.AddToBack(e);
            }
            return(false);
        }
Example #15
0
        public async Task <bool> OnAt(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            bool selfAted = e.Chain.Where(msg => msg is AtMessage)
                            .Cast <AtMessage>()
                            .Select(atmsg => atmsg.Target)
                            .Contains(session.QQNumber.Value);

            if (selfAted)
            {
                var imgmsg = await session.UploadPictureAsync(UploadTarget.Group, @"..\..\..\images\kokoaCry.jpg");

                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new PlainMessage("检测到您正在at我!主人很懒,不想实" +
                                                                                                             "现接受at信息调用我的模块,请直接使用文字命令来调用!"),
                                                                                            imgmsg }, ((SourceMessage)e.Chain[0]).Id);
            }
            return(false);
        }
Example #16
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (e.GetMessage().IsCommand())
            {
                var assembly    = Assembly.GetExecutingAssembly();
                var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);

                switch (e.GetMessage())
                {
                case "/Help":
                    await session.SendPlainText(e, $"欢迎使用HeliumBot {fileVersion.FileVersion}", "===================",
                                                "/Help : 查看帮助",
                                                "/Genshin <uid> : 获取指定原神UID的公开信息",
                                                "/Genshin <uid> -Avatar : 获取指定原神UID的公开信息,并查看获得的角色",
                                                "/GenshinAbyss <uid> : 获取指定原神UID的深渊战绩",
                                                "/GenshinAbyss <uid> -Detail : 获取指定原神UID的深渊战绩,并且查看每层每间详情",
                                                "/Money : 给作者打钱",
                                                "/About : 查看Bot的关于信息");

                    break;

                case "/Money":
                    var img = await session.UploadPictureAsync(UploadTarget.Group,
                                                               await new HttpClient().GetStreamAsync("https://i.loli.net/2021/05/04/fXOm1xnrsBg45Zh.jpg"));

                    await session.SendGroupMessageAsync(e.Sender.Group.Id, img);

                    break;

                case "/About":
                    await session.SendPlainText(e, $"HeliumBot {fileVersion.FileVersion}",
                                                $"Maintain by AHpx(https://github.com/AHpxChina)",
                                                $"Based on Mirai-CSharp(https://github.com/Executor-Cheng/Mirai-CSharp)",
                                                $"Open source repository on https://github.com/AHpxChina/HeliumBot",
                                                $"Acknowledgment:",
                                                $"mirai(https://github.com/mamoe/mirai)",
                                                $"mirai-api-http(https://github.com/mamoe/mirai-api-http)",
                                                $"mirai-console(https://github.com/mamoe/mirai-console)");

                    break;
                }
            }

            return(false);
        }
 /// <summary>
 /// 接受群消息接口
 /// </summary>
 /// <param name="session"></param>
 /// <param name="e"></param>
 /// <returns></returns>
 public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
 {
     foreach (var item in e.Chain)
     {
         if (item.Type.Equals("Plain"))
         {
             string    message   = item.ToString();
             GameInput gameInput = new GameInput(session, message, e.Sender, e.Sender.Group);
             try
             {
                 await GameSelector.DealCommand(gameInput);
             }
             catch (Exception ex)
             {
                 await gameInput.ReplyGroup("命令错误!" + ex.Message);
             }
         }
     }
     return(false);
 }
Example #18
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e) // 法2: 使用 params IMessageBase[]
        {
            if (e.Chain[1].Type == "Image")
            {
                var source = (SourceMessage)e.Chain[0];
                await session.RevokeMessageAsync(source.Id);

                return(true);
            }
            var replyMsg = await GroupMessageHandler(e);

            if (replyMsg == null || replyMsg.Message == string.Empty)
            {
                return(true);
            }

            await session.SendGroupMessageAsync(e.Sender.Group.Id, new AtMessage(e.Sender.Id), replyMsg /*, plain2, /* etc... */); // 向消息来源群异步发送由以上chain表示的消息

            return(false);                                                                                                         // 不阻断消息传递。如需阻断请返回true
        }
Example #19
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            var source = e.Chain.First() as SourceMessage;

            if (source != null && (Configuration.GetConfig <Antirevoke>().hash.Contains(e.Sender.Group.Id) || e.Sender.Group.Id == 708647018))
            {
                var now = DateTime.Now;
                while (msgRecord.Count > 0)
                {
                    if (now - msgRecord.Peek().time > new TimeSpan(0, 10, 0))
                    {
                        msgRecord.Dequeue();
                    }
                    else
                    {
                        break;
                    }
                }

                msgRecord.Enqueue(new Message
                {
                    id      = source.Id,
                    message = e.Chain.Skip(1).ToArray(),
                    group   = e.Sender.Group.Id,
                    qq      = e.Sender.Id,
                    time    = now
                });
            }

            await OnMessage(session, Utils.GetCQMessage(e.Chain), new Source
            {
                FromGroup = e.Sender.Group.Id,
                FromQQ    = e.Sender.Id,
                Session   = session
            });

            return(false);
        }
Example #20
0
        private async Task <bool> Session_GroupMessageEvt(MiraiHttpSession sender, IGroupMessageEventArgs e)
        {
            var msg  = MsgParser.GetMsgString(e.Chain);
            var time = DateTime.Now;

            if (e.Sender.Group.Id == currentSession && currentType == Model.Enums.SessionType.GroupMsg)
            {
                this.Invoke(new Action(() =>
                {
                    RtbMessage.Text += "\r\n" +
                                       $"{time:dd/MM/yyyy HH:mm:ss} {e.Sender.Name} ({e.Sender.Id}):\r\n{msg}";
                }));
            }

            this.Invoke(new Action(() =>
            {
                NtfIcon.ShowBalloonTip(500, "New Message", $"From {e.Sender.Group.Name} ({e.Sender.Id}\n{msg}",
                                       ToolTipIcon.Info);
            }));

            HistoryMsg.Group.AddMsg(e.Sender.Group, msg, time, e.Sender);
            return(false);
        }
Example #21
0
        public async Task <bool> ManagementUsingAt(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            for (int i = 0; i < e.Chain.Length; i++)
            {
                if (e.Chain[i] is AtMessage atmsg)
                {
                    e.Chain[i] = new PlainMessage(atmsg.Target.ToString());
                }
                else if (!(e.Chain[i] is SourceMessage) && !(e.Chain[i] is PlainMessage))
                {
                    return(false);
                }
            }

            var newChain = new IMessageBase[] { e.Chain[0], new PlainMessage(e.Chain.Skip(1).Select(msg => ((PlainMessage)msg).Message)
                                                                             .Aggregate((x, y) => x + y)) };
            //Console.WriteLine(((PlainMessage)newChain[1]).Message);
            var newArgs = new GroupMessageEventArgs(newChain, e.Sender);

            await MemberBan(session, newArgs);
            await MemberKick(session, newArgs);

            return(false);
        }
Example #22
0
 public static string GetMessage(this IGroupMessageEventArgs ex)
 {
     return(ex.Chain[1].ToString());
 }
Example #23
0
        public async Task <bool> MemberBan(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (!Config.ApplyedGroups.Contains(e.Sender.Group.Id))
            {
                return(false);
            }
            string?command;
            bool   isCommand = Utility.ProcessCommandSession(e, out command);

            if (!isCommand)
            {
                return(false);
            }
            var commandArgs = command.Split(' ', count: 3, StringSplitOptions.RemoveEmptyEntries);

            if (commandArgs.Length != 3 || !memberBanCommandList.Contains(commandArgs[0].ToLower()))
            {
                return(false);
            }

            long target;

            string[] time;
            int      h, m, s;

            bool ok = long.TryParse(commandArgs[1], out target);

            time = commandArgs[2].Split(':', StringSplitOptions.RemoveEmptyEntries);
            ok  &= (time.Length == 3);
            if (!ok)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new AtMessage(e.Sender.Id),
                                                                                            new PlainMessage("参数错误") });

                return(false);
            }
            if (!int.TryParse(time[0], out h) || !int.TryParse(time[1], out m) || !int.TryParse(time[2], out s))
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new AtMessage(e.Sender.Id),
                                                                                            new PlainMessage("参数错误") });

                return(false);
            }
            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new AtMessage(e.Sender.Id),
                                                                                            new PlainMessage("已有命令注册,请等待被注册命令结束") });

                return(false);
            }

            Global.currentTask[e.Sender.Group.Id] = new MemberBan(target, e.Sender.Group.Id, session, new TimeSpan(h, m, s));
            await Task.Delay(TimeSpan.FromMinutes(2));

            if (Global.currentTask[e.Sender.Group.Id] != null)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("挂起的任务已超时"));
            }
            Global.currentTask[e.Sender.Group.Id] = null;
            return(false);
        }
Example #24
0
        public static async Task Run(CommandParser.Config args, MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (args.ConfigInGroup == false)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id,
                                                    new PlainMessage("警告:未提供命令参数-g的情况下在群内试图配置用户信息。\n" +
                                                                     "为保证账号安全,停止了此操作并尝试撤回了信息。"));

                await session.RevokeMessageAsync(((SourceMessage)e.Chain[0]).Id);

                return;
            }
            await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("正在保存..."));

            var user = new User(e.Sender.Id)
            {
                Username = args.Username, Password = args.Password
            };
            bool ok = await user.TrySave();

            await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage(ok ? "成功更改了配置。" : "抱歉,遇到了错误,请稍后再试。"));
        }
Example #25
0
 public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
 {
     qc.chainReceived(e.Sender.Group, e.Sender, e.Chain);
     return(false);
 }
Example #26
0
        async Task <bool> IGroupMessage.GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (BotInfo.BannedGroup.Contains(e.Sender.Group.Id))
            {
                return(false);
            }
            if (BotInfo.BannedUser.Contains(e.Sender.Id))
            {
                return(false);
            }
            if (BotInfo.DebugMode)
            {
                if (BotInfo.DebugReplyAdminOnly)
                {
                    if (!BotInfo.AdminQQ.Contains(e.Sender.Id))
                    {
                        return(false);
                    }
                }
                if (BotInfo.OnlyReplyDebugGroup)
                {
                    if (!BotInfo.DebugGroups.Contains(e.Sender.Group.Id))
                    {
                        return(false);
                    }
                }
            }

            QuoteMessage quoteMessage = new QuoteMessage((e.Chain[0] as SourceMessage).Id, e.Sender.Group.Id, e.Sender.Id, e.Sender.Id, null);

            if (e.Chain.Length > 1)  //普通消息
            {
                switch (e.Chain[1].Type)
                {
                case "At":
                    if (e.Chain.Length > 2)
                    {
                        #region -- @搜图 --
                        AtMessage atMe = e.Chain[1] as AtMessage;
                        if (atMe.Target == BotInfo.QQId)      //@自己
                        {
                            for (int i = 2; i < e.Chain.Length; i++)
                            {
                                if (e.Chain[i].Type == "Image")
                                {
                                    ImageMessage imgMsg = e.Chain[i] as ImageMessage;
                                    await SearchPictureHandler.SearchPicture(imgMsg, picStream => session.UploadPictureAsync(UploadTarget.Group, picStream), msg => session.SendGroupMessageAsync(e.Sender.Group.Id, msg, quoteMessage.Id));
                                }
                            }
                        }
                        #endregion -- @搜图 --
                    }
                    break;

                case "Plain":
                    PlainMessageHandler.HandleGroupMesage(session, e.Chain, e.Sender, quoteMessage);
                    break;

                case "Image":
                    if (Cache.SearchingPictures.Keys.Contains(e.Sender.Id))
                    {
                        #region -- 连续搜图 --
                        for (int i = 1; i < e.Chain.Length; i++)
                        {
                            ImageMessage imgMsg = e.Chain[i] as ImageMessage;
                            await SearchPictureHandler.SuccessiveSearchPicture(session, imgMsg, e.Sender, picStream => session.UploadPictureAsync(UploadTarget.Group, picStream), msg => session.SendGroupMessageAsync(e.Sender.Group.Id, msg, quoteMessage.Id));
                        }
                        #endregion -- 连续搜图 --
                    }
                    break;
                }
            }
            return(false);
        }
Example #27
0
        public async Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            Stopwatch sw = Stopwatch.StartNew();

            if (e.Chain[1] is PlainMessage)
            {
                var plain = e.Chain[1] as PlainMessage;
                lock (Instance.LogLocker)
                {
                    Console.Write("[" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "] ", Color.Yellow);
                    Console.Write("[MESSAGE] ", Color.ForestGreen);
                    Console.Write("[" + e.Sender.Group.Name + "]: ", Color.Orange);
                    Console.Write("[" + e.Sender.Name + "]: ", Color.Cyan);
                    Console.WriteLine(plain.Message.Replace("\n", "\\n"));
                }
                var data = valuePairs(configType.自动回复);
                if (data.Keys.Contains(plain.Message))
                {
                    if (data[plain.Message].Contains('|'))
                    {
                        var           messages = data[plain.Message].Split('|');
                        Random        rnd      = new Random();
                        StringBuilder sb       = new StringBuilder();
                        var           lines    = messages[rnd.Next(0, messages.Length)].Split('\\');
                        foreach (var line in lines)
                        {
                            sb.AppendLine(line);
                        }
                        foreach (var message in SplitLongMessage(sb.ToString()))
                        {
                            if (message.Contains("@发送者"))
                            {
                                List <IMessageBase> mb = new List <IMessageBase>();
                                var splits             = message.Split("@发送者");
                                foreach (var split in splits)
                                {
                                    if (string.IsNullOrWhiteSpace(split) || string.IsNullOrEmpty(split))
                                    {
                                        continue;
                                    }
                                    mb.Add(new AtMessage(e.Sender.Id));
                                    mb.Add(new PlainMessage(split));
                                }
                                await session.SendGroupMessageAsync(e.Sender.Group.Id, mb.ToArray());
                            }
                            else
                            {
                                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new PlainMessage(message) });
                            }
                            Thread.Sleep(rnd.Next(1000, 4000));
                        }
                    }
                    else
                    {
                        StringBuilder sb    = new StringBuilder();
                        var           lines = data[plain.Message].Split('\\');
                        foreach (var line in lines)
                        {
                            sb.AppendLine(line);
                        }
                        Random rnd = new Random();
                        foreach (var message in SplitLongMessage(sb.ToString()))
                        {
                            if (message.Contains("@发送者"))
                            {
                                List <IMessageBase> mb = new List <IMessageBase>();
                                var splits             = message.Split("@发送者");
                                foreach (var split in splits)
                                {
                                    if (string.IsNullOrWhiteSpace(split) || string.IsNullOrEmpty(split))
                                    {
                                        continue;
                                    }
                                    mb.Add(new AtMessage(e.Sender.Id));
                                    mb.Add(new PlainMessage(split));
                                }
                                await session.SendGroupMessageAsync(e.Sender.Group.Id, mb.ToArray());
                            }
                            else
                            {
                                await session.SendGroupMessageAsync(e.Sender.Group.Id, new IMessageBase[] { new PlainMessage(message) });
                            }
                            Thread.Sleep(rnd.Next(1000, 4000));
                        }
                    }
                }
                else if (plain.Message.StartsWith("/"))
                {
                    var eventArgs = new ChainEventArgs()
                    {
                        Message = plain.Message, MessageChain = e.Chain, Sender = e.Sender, Session = session
                    };
                    using GameAPI Member = new GameAPI(eventArgs);
                    Instance.chains[0].SetMember(Member.Member);
                    var result = await Instance.chains[0].GetReply(eventArgs);
                    if (result.Count() > 0)
                    {
                        await session.SendGroupMessageAsync(e.Sender.Group.Id, result.ToArray());
                    }
                    else if (!Instance.GameEnabled.Any(x => x == e.Sender.Group.Id))
                    {
                        switch (plain.Message)
                        {
                        case "/拉霸":
                            Member.JackPot();
                            break;

                        case "/寻宝":
                            Member.FindTreasure();
                            break;

                        case "/帮助":
                            Member.Help();
                            break;

                        case "/工作":
                            Member.MemberWork();
                            break;

                        case "/我":
                            Member.MemberCheck();
                            break;

                        case "/21点":
                            Member.Member21Point();
                            break;

                        case "/排名":
                            Member.GetRank();
                            break;

                        case "/合成A":
                        case "/合成a":
                            Member.Buff("A");
                            break;

                        case "/合成H":
                        case "/合成h":
                            Member.Buff("H");
                            break;

                        case "/拍卖场":
                            Member.ListTrade();
                            break;

                        default:
                            if (plain.Message.StartsWith("/打劫"))
                            {
                                Member.Robber(new ChainEventArgs()
                                {
                                    Message = plain.Message, MessageChain = e.Chain, Sender = e.Sender, Session = session
                                });
                            }
                            else if (plain.Message.StartsWith("/购买"))
                            {
                                Member.Shop(new ChainEventArgs()
                                {
                                    Message = plain.Message, MessageChain = e.Chain, Sender = e.Sender, Session = session
                                });
                            }
                            else if (plain.Message.StartsWith("/技能"))
                            {
                                Member.SkillShop(new ChainEventArgs()
                                {
                                    Message = plain.Message, MessageChain = e.Chain, Sender = e.Sender, Session = session
                                });
                            }
                            else if (plain.Message.StartsWith("/拍卖场购买"))
                            {
                                Member.PurchaseTradeItem(plain.Message);
                            }
                            else if (plain.Message.StartsWith("/拍卖场出售"))
                            {
                                Member.SellTradeItem(plain.Message);
                            }
                            break;
                        }
                    }
                }
                sw.Stop();
                Logger.Instance.AddLog(LogType.Debug, "消息处理完毕,使用了" + sw.Elapsed.TotalMilliseconds + "毫秒");
                return(true);
            }
            else
            {
                lock (Instance.LogLocker)
                {
                    Console.Write("[" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "] ", Color.Yellow);
                    Console.Write("[MESSAGE] ", Color.ForestGreen);
                    Console.Write("[" + e.Sender.Group.Name + "]: ", Color.FloralWhite);
                    Console.Write("[" + e.Sender.Name + "]: ", Color.Cyan);
                    for (int x = 1; x < e.Chain.Length; x++)
                    {
                        Console.Write(e.Chain[x].ToString().Replace("\n", "\\n"));
                    }
                    Console.WriteLine();
                }
            }
            if (Directory.Exists("Buffer"))
            {
                foreach (var file in Directory.GetFiles("Buffer"))
                {
                    FileInfo info   = new FileInfo(file);
                    var      alived = DateTime.Now - info.CreationTime;
                    if (alived.TotalDays >= 1)
                    {
                        try
                        {
                            info.Delete();
                        }
                        catch
                        {
                            Logger.Instance.AddLog(LogType.Error, "缓存文件[" + file + "]无法被删除!");
                        }
                    }
                }
            }
            sw.Stop();
            Logger.Instance.AddLog(LogType.Debug, "消息处理完毕,使用了" + sw.Elapsed.TotalMilliseconds + "毫秒");
            return(false);
        }
Example #28
0
 public Task <bool> GroupMessage(MiraiHttpSession session, IGroupMessageEventArgs e)
 {
     BotCore.OnMessage(new MessageSource(e.Sender.Group.Id, e.Sender.Id, false), new QMessage(e.Chain));
     return(Task.FromResult(true));
 }
Example #29
0
        public static async Task Run(CommandParser.GenerateCalender args, MiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (++CurrentGenerateRequestNum > 3)
            {
                await session.SendGroupMessageAsync(e.Sender.Group.Id, new PlainMessage("目前请求过多。请稍后再试"));

                CurrentGenerateRequestNum--;
                return;
            }
            if (System.IO.File.Exists(@$ "{Config.RootPath}\Users\{e.Sender.Id}\calender.json"))
Example #30
0
 public static bool SiglePlainMessageChecker(IGroupMessageEventArgs args)
 => args.Chain.Length == 2 && args.Chain[1] is PlainMessage;