/// <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; }
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); }
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)); }
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; }
public GroupMemberStringPropertyChangedEventArgs(IGroupMemberInfo member, string origin, string current) : base(member, origin, current) { }
public GroupEntranceAnnouncementChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, string origin, string current) : base(group, @operator, origin, current) { }
public TempMessageEventArgs(IMessageBase[] chain, IGroupMemberInfo sender) : base(chain, sender) { }
public GroupPropertyChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, TProperty origin, TProperty current) : base(group, origin, current) { Operator = @operator; }
public OperatorEventArgs(IGroupMemberInfo @operator) { Operator = @operator; }
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 -- 查询手机号(夹带私货) -- }
public GroupMemberUnmutedEventArgs(IGroupMemberInfo member, IGroupMemberInfo @operator) : base(member, @operator) { }
public GroupMemberInviteChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, bool origin, bool current) : base(group, @operator, origin, current) { }
protected GroupMessageBaseEventArgs(IMessageBase[] chain, IGroupMemberInfo sender) : base(chain) { Sender = sender; }
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) { }
protected MemberEventArgs(IGroupMemberInfo member) { Member = member; }
protected OperatorEventArgs(IGroupMemberInfo @operator) { Operator = @operator; }
public GroupMemberPositiveLeaveEventArgs(IGroupMemberInfo member) : base(member) { }
public GroupMessageEventArgs(IChatMessage[] chain, IGroupMemberInfo sender) : base(chain, sender) { }
public GroupMemberSpecialTitleChangedEventArgs(IGroupMemberInfo member, string origin, string current) : base(member, origin, current) { }
public BotKickedOutEventArgs(IGroupInfo group, IGroupMemberInfo @operator) : base(group, @operator) { }
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); }
public GroupMemberMutedEventArgs(TimeSpan duration, IGroupMemberInfo member, IGroupMemberInfo @operator) : base(member, @operator) { Duration = duration; }
public GroupOperatingEventArgs(IGroupInfo group, IGroupMemberInfo @operator) : base(@operator) { Group = group; }
public GroupMemberPermissionChangedEventArgs(IGroupMemberInfo member, GroupPermission origin, GroupPermission current) : base(member, origin, current) { }
public MemberOperatingEventArgs(IGroupMemberInfo member, IGroupMemberInfo @operator) : base(@operator) { Member = member; }
public GroupMessageRevokedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, long senderId, int messageId, DateTime sentTime) : base(senderId, messageId, sentTime) { Group = group; Operator = @operator; }
public MemberEventArgs(IGroupMemberInfo member) { Member = member; }
public GroupNameChangedEventArgs(IGroupInfo group, IGroupMemberInfo @operator, string origin, string current) : base(group, @operator, origin, current) { }
public GroupMemberJoinedEventArgs(IGroupMemberInfo member) : base(member) { }