コード例 #1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="mirai"></param>
 /// <param name="command"></param>
 /// <param name="info"></param>
 /// <param name="groupInfo"></param>
 public GameInput(MiraiHttpSession mirai, string command, IGroupMemberInfo info, IGroupInfo groupInfo)
 {
     this.Mirai     = mirai;
     this.Command   = command;
     this.GroupInfo = groupInfo;
     this.Sender    = info;
 }
コード例 #2
0
 private bool CheckPreconditions(IGroupMemberInfo e)
 {
     if (BotInfo.BannedGroup.Contains(e.Group.Id) ||
         BotInfo.BannedUser.Contains(e.Id))
     {
         return(false);
     }
     if (BotInfo.DebugMode)
     {
         if (BotInfo.DebugReplyAdminOnly)
         {
             if (!BotInfo.AdminQQ.Contains(e.Id))
             {
                 return(false);
             }
         }
         if (BotInfo.OnlyReplyDebugGroup)
         {
             if (!BotInfo.DebugGroups.Contains(e.Group.Id))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
コード例 #3
0
ファイル: QClient.cs プロジェクト: developer-ken/QChatClient
        public void chainReceived(IGroupInfo group, IGroupMemberInfo sender, IMessageBase[] msg)
        {
            foreach (Conversation conv in conversations)
            {
                if (conv.peerid == group.Id)
                {
                    conv.messages.Add(new KeyValuePair <IBaseInfo, IMessageBase[]>(sender, msg));
                    if (conv.Equals(current))
                    {
                        addonRefresh();
                    }
                    return;
                }
            }

            //没有符合的Conversation,创建。
            startConversation(sender.Group.Id, sender.Group.Name, 1).messages.Add(new KeyValuePair <IBaseInfo, IMessageBase[]>(sender, msg));
        }
コード例 #4
0
        public async Task HandleMessageAsync(IMiraiHttpSession session, IGroupMessageEventArgs e)
        {
            if (!CheckPreconditions(e.Sender))
            {
                return;
            }
            LogHelper.WriteInfoLog($"收到来自{e.Sender.Id}的群消息");

            int quoteId = (e.Chain[0] as SourceMessage).Id;

            for (int i = 0; i < e.Chain.Length; i++)
            {
                //获取@群名片
                if (e.Chain[i] is IAtMessage atMsg)
                {
                    IGroupMemberInfo[] groupMemberInfos = await session.GetGroupMemberListAsync(e.Sender.Group.Id);

                    IGroupMemberInfo targetQQ = groupMemberInfos.Where(m => m.Id == atMsg.Target).FirstOrDefault();
                    string           nickName = targetQQ?.Name;
                    e.Chain[i] = new AtMessage(atMsg.Target, nickName);
                }
            }

            bool isHandle = await MessageHandler.HandleMesage(e.Chain.ToOnionsMessages(e.Sender.Id, e.Sender.Name), e.Sender.Group.Id, async outMsg =>
            {
                if (outMsg != null)
                {
                    int iRevokeTime = outMsg.RevokeTime;
                    var msg         = await outMsg.ToMiraiApiHttpMessages(session, UploadTarget.Group);
                    _ = session.SendGroupMessageAsync(e.Sender.Group.Id, msg, outMsg.Reply ? quoteId : null).ContinueWith(async sendedCallBack =>
                    {
                        if (iRevokeTime > 0)
                        {
                            await Task.Delay(1000 * iRevokeTime);
                            _ = session.RevokeMessageAsync(sendedCallBack.Result);
                        }
                    });
                }
            });

            e.BlockRemainingHandlers = isHandle;
        }
コード例 #5
0
 public GroupMemberStringPropertyChangedEventArgs(IGroupMemberInfo member, string origin, string current) : base(member, origin, current)
 {
 }
コード例 #6
0
 public GroupEntranceAnnouncementChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, string origin, string current) : base(group, @operator, origin, current)
 {
 }
コード例 #7
0
 public TempMessageEventArgs(IMessageBase[] chain, IGroupMemberInfo sender) : base(chain, sender)
 {
 }
コード例 #8
0
 public GroupPropertyChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, TProperty origin, TProperty current) : base(group, origin, current)
 {
     Operator = @operator;
 }
コード例 #9
0
 public OperatorEventArgs(IGroupMemberInfo @operator)
 {
     Operator = @operator;
 }
コード例 #10
0
        public static async void HandleGroupMesage(MiraiHttpSession session, IMessageBase[] Chain, IGroupMemberInfo sender, QuoteMessage quoteMessage)
        {
            Regex regexSearchOn           = new Regex(BotInfo.SearchModeOnCmd.ReplaceGreenOnionsTags());
            Regex regexSearchOff          = new Regex(BotInfo.SearchModeOffCmd.ReplaceGreenOnionsTags());
            Regex regexTranslateToChinese = new Regex(BotInfo.TranslateToChineseCMD.ReplaceGreenOnionsTags());
            Regex regexTranslateTo        = new Regex(BotInfo.TranslateToCMD.ReplaceGreenOnionsTags());
            Regex regexHPicture           = new Regex(BotInfo.HPictureCmd.ReplaceGreenOnionsTags());
            Regex regexShabHPicture       = new Regex(BotInfo.ShabHPictureCmd.ReplaceGreenOnionsTags());
            Regex regexSelectPhone        = new Regex($"({BotInfo.BotName}查询手机号[::])");


            string firstMessage = Chain[1].ToString();

            #region -- 连续搜图 --
            if (regexSearchOn.IsMatch(firstMessage))
            {
                if (Cache.SearchingPictures.ContainsKey(sender.Id))
                {
                    Cache.SearchingPictures[sender.Id] = DateTime.Now.AddMinutes(1);
                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.SearchModeAlreadyOnReply.ReplaceGreenOnionsTags()) }, quoteMessage.Id);
                }
                else
                {
                    Cache.SearchingPictures.Add(sender.Id, DateTime.Now.AddMinutes(1));
                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.SearchModeOnReply.ReplaceGreenOnionsTags()) }, quoteMessage.Id);

                    Cache.CheckSearchPictureTime(callback =>
                    {
                        Cache.SearchingPictures.Remove(sender.Id);
                        session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.SearchModeTimeOutReply.ReplaceGreenOnionsTags()) }, quoteMessage.Id);
                    });
                }
            }
            else if (regexSearchOff.IsMatch(firstMessage))
            {
                if (Cache.SearchingPictures.ContainsKey(sender.Id))
                {
                    Cache.SearchingPictures.Remove(sender.Id);
                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.SearchModeOffReply.ReplaceGreenOnionsTags()) }, quoteMessage.Id);
                }
                else
                {
                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.SearchModeAlreadyOffReply.ReplaceGreenOnionsTags()) }, quoteMessage.Id);
                }
            }
            #endregion -- 连续搜图 --
            #region -- 翻译 --
            else if (regexTranslateToChinese.IsMatch(firstMessage))
            {
                foreach (Match match in regexTranslateToChinese.Matches(firstMessage))
                {
                    try
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(await GoogleTranslateHelper.TranslateToChinese(firstMessage.Substring(match.Value.Length))) }, quoteMessage.Id);
                    }
                    catch (Exception ex)
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new PlainMessage("翻译失败," + ex.Message));
                    }
                    break;
                }
            }
            else if (regexTranslateTo.IsMatch(firstMessage))
            {
                foreach (Match match in regexTranslateTo.Matches(firstMessage))
                {
                    if (match.Groups.Count > 1)
                    {
                        try
                        {
                            await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(await GoogleTranslateHelper.TranslateTo(firstMessage.Substring(match.Value.Length), match.Groups[1].Value)) }, quoteMessage.Id);
                        }
                        catch (Exception ex)
                        {
                            await session.SendGroupMessageAsync(sender.Group.Id, new PlainMessage("翻译失败," + ex.Message));
                        }
                    }
                    break;
                }
            }
            #endregion -- 翻译 --
            #region -- 色图 --
            #region -- Lolicon图库 --
            else if (BotInfo.EnabledLoliconDataBase && (regexHPicture.IsMatch(firstMessage) || BotInfo.HPictureUserCmd.Contains(firstMessage)))
            {
                #region -- 异步流色图(已弃用) --
                //await foreach (var item in HPictureHandlerAsync.SendHPictures(session, firstMessage, BotInfo.HPictureAllowR18 && (!BotInfo.HPictureR18WhiteOnly || BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id))))
                //{
                //    int messageID = await session.SendGroupMessageAsync(sender.Group.Id, new[] { item }, quoteMessage.Id);

                //    if (item is PlainMessage)  //地址发出去后记录次数
                //    {
                //        if (BotInfo.HPictureLimitType == LimitType.Frequency)
                //        {
                //            Cache.RecordLimit(sender.Id);
                //        }
                //        Cache.RecordCD(sender.Id, sender.Group.Id);
                //    }
                //    else if (item is ImageMessage)
                //    {
                //        if (BotInfo.HPictureLimitType == LimitType.Count)
                //        {
                //            Cache.RecordLimit(sender.Id);
                //        }
                //        HPictureHandler.RevokeHPicture(session, messageID, BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id) ? BotInfo.HPictureWhiteRevoke : BotInfo.HPictureRevoke);
                //    }
                //}
                #endregion -- 异步流色图(已弃用) --

                if (sender.Permission == GroupPermission.Member || !BotInfo.HPictureManageNoLimit)
                {
                    if (Cache.CheckGroupLimit(sender.Id, sender.Group.Id))
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.HPictureOutOfLimitReply) }, quoteMessage.Id);

                        return;
                    }
                    if (Cache.CheckGroupCD(sender.Id, sender.Group.Id))
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.HPictureCDUnreadyReply) }, quoteMessage.Id);

                        return;
                    }
                }

                HPictureHandler.SendHPictures(session, firstMessage, BotInfo.HPictureAllowR18 && (!BotInfo.HPictureR18WhiteOnly || BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id)), BotInfo.HPictureEndCmd, stream => session.UploadPictureAsync(UploadTarget.Group, stream), msg => session.SendGroupMessageAsync(sender.Group.Id, msg, quoteMessage.Id), limitType =>
                {
                    if (limitType == LimitType.Frequency)
                    {
                        Cache.RecordGroupCD(sender.Id, sender.Group.Id);
                        if (BotInfo.HPictureLimitType == LimitType.Frequency)
                        {
                            Cache.RecordLimit(sender.Id);
                        }
                    }
                    else if (limitType == LimitType.Count && BotInfo.HPictureLimitType == LimitType.Count)
                    {
                        Cache.RecordLimit(sender.Id);
                    }
                }, BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id) ? BotInfo.HPictureWhiteRevoke : BotInfo.HPictureRevoke);
            }
            #endregion  -- Lolicon图库 --
            #region -- Shab图库 --
            else if (BotInfo.EnabledShabDataBase && (regexShabHPicture.IsMatch(firstMessage) || BotInfo.HPictureUserCmd.Contains(firstMessage)))
            {
                if (sender.Permission == GroupPermission.Member || !BotInfo.HPictureManageNoLimit)
                {
                    if (Cache.CheckGroupLimit(sender.Id, sender.Group.Id))
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.HPictureOutOfLimitReply) }, quoteMessage.Id);

                        return;
                    }
                    if (Cache.CheckGroupCD(sender.Id, sender.Group.Id))
                    {
                        await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(BotInfo.HPictureCDUnreadyReply) }, quoteMessage.Id);

                        return;
                    }
                }

                HPictureHandler.SendHPictures(session, firstMessage, BotInfo.HPictureAllowR18 && (!BotInfo.HPictureR18WhiteOnly || BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id)), BotInfo.ShabHPictureEndCmd, stream => session.UploadPictureAsync(UploadTarget.Group, stream), msg => session.SendGroupMessageAsync(sender.Group.Id, msg, quoteMessage.Id), limitType =>
                {
                    if (limitType == LimitType.Frequency)
                    {
                        Cache.RecordGroupCD(sender.Id, sender.Group.Id);
                        if (BotInfo.HPictureLimitType == LimitType.Frequency)
                        {
                            Cache.RecordLimit(sender.Id);
                        }
                    }
                    else if (limitType == LimitType.Count && BotInfo.HPictureLimitType == LimitType.Count)
                    {
                        Cache.RecordLimit(sender.Id);
                    }
                }, BotInfo.HPictureWhiteGroup.Contains(sender.Group.Id) ? BotInfo.HPictureWhiteRevoke : BotInfo.HPictureRevoke);
            }
            #endregion -- Shab图库 --
            #endregion -- 色图 --
            else if (firstMessage == $"{BotInfo.BotName}帮助")
            {
                List <string> lstEnabledFeatures = new List <string>();
                if (BotInfo.SearchEnabled)
                {
                    lstEnabledFeatures.Add("搜图");
                }
                if (BotInfo.TranslateEnabled)
                {
                    lstEnabledFeatures.Add("翻译");
                }
                if (BotInfo.HPictureEnabled)
                {
                    lstEnabledFeatures.Add("GHS");
                }
                if (BotInfo.QQId == 3246934384)
                {
                    lstEnabledFeatures.Add("查手机号");
                }
                string strHelpResult = $"现在您可以让我{string.Join(",", lstEnabledFeatures)}。\r\n如果您觉得{BotInfo.BotName}好用,请到{BotInfo.BotName}的项目地址 https://github.com/Alex1911-Jiang/GreenOnions 给{BotInfo.BotName}一颗星星。";
                await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(strHelpResult) }, quoteMessage.Id);
            }
            #region -- 查询手机号(夹带私货) --
            else if (regexSelectPhone.IsMatch(firstMessage))
            {
                if (BotInfo.QQId == 3246934384)
                {
                    foreach (Match match in regexSelectPhone.Matches(firstMessage))
                    {
                        if (match.Groups.Count > 1)
                        {
                            string qqNumber = firstMessage.Substring(match.Groups[1].Length);
                            long   lQQNumber;
                            if (long.TryParse(qqNumber, out lQQNumber))
                            {
                                try
                                {
                                    string result = AssemblyHelper.CallStaticMethod <string>("GreenOnions.QQPhone", "GreenOnions.QQPhone.QQAndPhone", "GetPhoneByQQ", lQQNumber);
                                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage(result) }, quoteMessage.Id);
                                }
                                catch (Exception ex)
                                {
                                    await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage("查询失败" + ex.Message) }, quoteMessage.Id);
                                }
                            }
                            else
                            {
                                await session.SendGroupMessageAsync(sender.Group.Id, new[] { new PlainMessage("请输入正确的QQ号码(不支持以邮箱查询)") }, quoteMessage.Id);
                            }
                        }
                    }
                }
            }
            #endregion -- 查询手机号(夹带私货) --
        }
コード例 #11
0
 public GroupMemberUnmutedEventArgs(IGroupMemberInfo member, IGroupMemberInfo @operator) : base(member, @operator)
 {
 }
コード例 #12
0
 public GroupMemberInviteChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, bool origin, bool current) : base(group, @operator, origin, current)
 {
 }
コード例 #13
0
 protected GroupMessageBaseEventArgs(IMessageBase[] chain, IGroupMemberInfo sender) : base(chain)
 {
     Sender = sender;
 }
コード例 #14
0
        private IMessageChainBuilder ReplaceMessage(IMessageChainBuilder builder, string messageCmd, IGroupMemberInfo member, IGroupMemberInfo Operator = null)
        {
            string remainMessage = messageCmd;

            foreach (Match match in regexTags.Matches(messageCmd))
            {
                string matchString = match.ToString();
                int    index       = remainMessage.IndexOf(matchString);
                string left        = remainMessage.Substring(0, index);
                if (!string.IsNullOrEmpty(left))
                {
                    builder.AddPlainMessage(left);
                }
                string right = remainMessage.Substring(index + matchString.Length);
                remainMessage = right;
                string identifier = match.ToString();

                if (identifier == "<@成员QQ>")
                {
                    builder.AddAtMessage(member.Id);
                }
                else if (identifier == "<成员QQ>")
                {
                    builder.AddPlainMessage(member.Id.ToString());
                }
                else if (identifier == "<成员昵称>")
                {
                    builder.AddPlainMessage(member.Name);
                }
                else if (Operator != null)
                {
                    if (identifier == "<@操作者QQ>")
                    {
                        builder.AddAtMessage(Operator.Id);
                    }
                    else if (identifier == "<操作者QQ>")
                    {
                        builder.AddPlainMessage(Operator.Id.ToString());
                    }
                    else if (identifier == "<操作者昵称>")
                    {
                        builder.AddPlainMessage(Operator.Name);
                    }
                }
            }
            builder.AddPlainMessage(remainMessage);
            return(builder);
        }
 public GroupMemberEnumPropertyChangedEventArgs(IGroupMemberInfo member, TProperty origin, TProperty current) : base(member, origin, current)
 {
 }
コード例 #16
0
 protected MemberEventArgs(IGroupMemberInfo member)
 {
     Member = member;
 }
コード例 #17
0
 protected OperatorEventArgs(IGroupMemberInfo @operator)
 {
     Operator = @operator;
 }
コード例 #18
0
 public GroupMemberPositiveLeaveEventArgs(IGroupMemberInfo member) : base(member)
 {
 }
コード例 #19
0
 public GroupMessageEventArgs(IChatMessage[] chain, IGroupMemberInfo sender) : base(chain, sender)
 {
 }
 public GroupMemberSpecialTitleChangedEventArgs(IGroupMemberInfo member, string origin, string current) : base(member, origin, current)
 {
 }
コード例 #21
0
 public BotKickedOutEventArgs(IGroupInfo group, IGroupMemberInfo @operator) : base(group, @operator)
 {
 }
コード例 #22
0
 public static async Task SuccessiveSearchPicture(MiraiHttpSession session, ImageMessage imgMsg, IGroupMemberInfo sender, Func <Stream, Task <ImageMessage> > UploadPicture, Action <IMessageBase[]> SendMessage)
 {
     Cache.SearchingPictures[sender.Id] = DateTime.Now.AddMinutes(1);
     await SearchPicture(imgMsg, UploadPicture, SendMessage);
 }
コード例 #23
0
 public GroupMemberMutedEventArgs(TimeSpan duration, IGroupMemberInfo member, IGroupMemberInfo @operator) : base(member, @operator)
 {
     Duration = duration;
 }
コード例 #24
0
 public GroupOperatingEventArgs(IGroupInfo group, IGroupMemberInfo @operator) : base(@operator)
 {
     Group = group;
 }
コード例 #25
0
 public GroupMemberPermissionChangedEventArgs(IGroupMemberInfo member, GroupPermission origin, GroupPermission current) : base(member, origin, current)
 {
 }
コード例 #26
0
 public MemberOperatingEventArgs(IGroupMemberInfo member, IGroupMemberInfo @operator) : base(@operator)
 {
     Member = member;
 }
コード例 #27
0
 public GroupMessageRevokedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, long senderId, int messageId, DateTime sentTime) : base(senderId, messageId, sentTime)
 {
     Group    = group;
     Operator = @operator;
 }
コード例 #28
0
 public MemberEventArgs(IGroupMemberInfo member)
 {
     Member = member;
 }
コード例 #29
0
 public GroupNameChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, string origin, string current) : base(group, @operator, origin, current)
 {
 }
コード例 #30
0
 public GroupMemberJoinedEventArgs(IGroupMemberInfo member) : base(member)
 {
 }