示例#1
0
        public static void SendTextMessage(MessageSourceType sourceType, string message, long?qq = null, long?toGroupNo = null)
        {
            switch (sourceType)
            {
            case MessageSourceType.Group:
                if (!toGroupNo.HasValue || toGroupNo <= 0)
                {
                    return;
                }
                SendTextMessageToGroup(toGroupNo.Value, message);
                break;

            case MessageSourceType.Private:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                SendTextMessagePrivate(qq.Value, message);
                break;

            case MessageSourceType.Friend:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                SendTextMessageFriend(qq.Value, message);
                break;
            }
        }
示例#2
0
 public AllianceUserRequests(MessageSourceType msType)
 {
     if (msType == MessageSourceType.IsUser)
     {
         _cbName = "My Requests to alliacne";
     }
     else if (msType == MessageSourceType.IsAlliance)
     {
         _cbName = "Requests to alliacne";
     }
 }
示例#3
0
        public static void SendMessage(MessageSourceType sourceType, List <BaseMessage> messages, long?qq = null,
                                       long?toGroupNo = null)
        {
            var message = new Message();

            switch (sourceType)
            {
            case MessageSourceType.Group:
                if (!toGroupNo.HasValue || toGroupNo <= 0)
                {
                    return;
                }
                message.Type    = MessageSourceType.Group;
                message.ToGroup = toGroupNo.Value;
                break;

            case MessageSourceType.Private:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                message.Type = MessageSourceType.Private;
                message.ToQQ = qq.Value;
                break;

            case MessageSourceType.Friend:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                message.Type = MessageSourceType.Friend;
                message.ToQQ = qq.Value;
                break;
            }

            message.Content.AddRange(messages);
            EventCenter.SendMessage(message);
        }
示例#4
0
        public static void SendImageMessage(MessageSourceType sourceType, string path, long?qq = null, long?toGroupNo = null)
        {
            var message = new Message();

            switch (sourceType)
            {
            case MessageSourceType.Group:
                if (!toGroupNo.HasValue || toGroupNo <= 0)
                {
                    return;
                }
                message.Type    = MessageSourceType.Group;
                message.ToGroup = toGroupNo.Value;
                break;

            case MessageSourceType.Private:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                message.Type = MessageSourceType.Private;
                message.ToQQ = qq.Value;
                SendTextMessagePrivate(qq.Value, path);
                break;

            case MessageSourceType.Friend:
                if (!qq.HasValue || qq <= 0)
                {
                    return;
                }
                message.Type = MessageSourceType.Friend;
                message.ToQQ = qq.Value;
                break;
            }
            message.AddImageMessage(path);
            PlatformManager.SendMessage(message);
        }
示例#5
0
        public override async System.Threading.Tasks.Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var toGroup = 0L;
            var fromQQ  = 0L;

            if (sourceType == MessageSourceType.Private)
            {
                fromQQ = qq.QQ;
                if (fromQQ != DataManager.Instance.AdminQQ)
                {
                    MessageManager.SendTextMessage(sourceType, "不给看不给看!", fromQQ, toGroup);
                    return;
                }
            }
            else if (sourceType == MessageSourceType.Group)
            {
                fromQQ  = member.QQ;
                toGroup = member.GroupNumber;
                if (command.Any() && command.First() == "on")
                {
                    if (member.QQ == DataManager.Instance.AdminQQ)
                    {
                        if (!DataManager.Instance.EnabledRandomImgNumbers.Contains(member.GroupNumber))
                        {
                            DataManager.Instance.EnabledRandomImgNumbers.Add(member.GroupNumber);
                            MessageManager.SendTextMessage(sourceType, "启用成功!", fromQQ, toGroup);
                            DataManager.Instance.NoticeConfigUpdated();
                            return;
                        }
                    }
                }
                else if (command.Any() && command.First() == "off")
                {
                    if (member.QQ == DataManager.Instance.AdminQQ)
                    {
                        if (DataManager.Instance.EnabledRandomImgNumbers.Contains(member.GroupNumber))
                        {
                            DataManager.Instance.EnabledRandomImgNumbers.Remove(member.GroupNumber);
                            MessageManager.SendTextMessage(sourceType, "禁用成功!", fromQQ, toGroup);
                            DataManager.Instance.NoticeConfigUpdated();
                            return;
                        }
                    }
                }

                if (!DataManager.Instance.EnabledRandomImgNumbers.Contains(member.GroupNumber))
                {
                    MessageManager.SendTextMessage(sourceType, "这个群没启用这个功能,快去找开发者来开启", fromQQ, toGroup);
                    return;
                }
            }
            else
            {
                return;
            }

            if (command.Count > 2)
            {
                MessageManager.SendTextMessage(sourceType, "Tag太多啦,一次最多只能查两个", fromQQ, toGroup);
                return;
            }

            var key = new Tuple <MessageSourceType, long>(sourceType, sourceType == MessageSourceType.Private ? fromQQ : toGroup);

            if (fromQQ != DataManager.Instance.AdminQQ)
            {
                if (_lastFetchTimeDic.ContainsKey(key))
                {
                    if (DateTime.Now.Subtract(_lastFetchTimeDic[key]).TotalSeconds < _intervalSeconds)
                    {
                        MessageManager.SendTextMessage(sourceType, "太频繁啦,每分钟只能出一张图", fromQQ, toGroup);
                        return;
                    }
                }
            }

            using (var client = new HttpClient())
            {
                var url = "https://danbooru.donmai.us/posts/random.json";
                var tag = string.Join("+", command);
                if ((command?.Count ?? 0) > 0)
                {
                    url += $"?tags={tag}";
                }
                var res = await client.GetAsync(url);

                if (res.StatusCode == System.Net.HttpStatusCode.NotFound)
                {
                    MessageManager.SendTextMessage(sourceType, $"{tag}:\ntag写错了吗,没找到图呢", fromQQ, toGroup);
                    return;
                }
                if (!res.IsSuccessStatusCode)
                {
                    MessageManager.SendTextMessage(sourceType, $"{tag}:\n请求失败了QAQ", fromQQ, toGroup);
                    return;
                }

                var strContent = await res.Content.ReadAsStringAsync();

                var jsonRes = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(strContent, new
                {
                    file_url  = "",
                    id        = 0L,
                    success   = (bool?)null,
                    is_banned = (bool?)null
                });
                if (jsonRes.success.HasValue && !jsonRes.success.Value)
                {
                    MessageManager.SendTextMessage(sourceType, $"{tag}:\ntag写错了吗,没找到图呢", fromQQ, toGroup);
                    return;
                }

                if (jsonRes.is_banned.HasValue && jsonRes.is_banned.Value)
                {
                    MessageManager.SendTextMessage(sourceType, $"{tag}:\nid:{jsonRes.id}\n这张图被作者要求下架了QAQ", fromQQ, toGroup);
                    return;
                }

                try
                {
                    var imgRes = await client.GetAsync(jsonRes.file_url);

                    var img      = System.Drawing.Image.FromStream(await imgRes.Content.ReadAsStreamAsync());
                    var fileName = jsonRes.file_url.Split('/').Last();

                    var dir  = Path.Combine(Config.DataPath, "image");
                    var path = Path.Combine(dir, fileName);
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    img.Save(path);
                    MessageManager.SendTextMessage(sourceType, $"[CQ:image,file={fileName}]\n{tag}:\nhttps://danbooru.donmai.us/posts/{jsonRes.id}",
                                                   fromQQ, toGroup);
                    File.Delete(path);
                }
                catch (Exception e)
                {
                    _logger.Error(e, $"download remote image failed, detail response: {Environment.NewLine}{Newtonsoft.Json.JsonConvert.SerializeObject(jsonRes)}");
                    throw;
                }

                if (fromQQ != DataManager.Instance.AdminQQ)
                {
                    if (_lastFetchTimeDic.ContainsKey(key))
                    {
                        _lastFetchTimeDic[key] = DateTime.Now;
                    }
                    else
                    {
                        _lastFetchTimeDic.Add(key, DateTime.Now);
                    }
                }
            }
            return;
        }
示例#6
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            Dictionary <string, string> descDic = null;

            if (sourceType == MessageSourceType.Group)
            {
                descDic = Config.GroupCommandDesc;
            }
            else if (sourceType == MessageSourceType.Private)
            {
                descDic = Config.PrivateCommandDesc;
            }
            else
            {
                return;
            }

            StringBuilder desc =
                new StringBuilder().AppendLine(string.Join("\n", descDic.Select(p => $"{p.Key}\t\t{p.Value}")));

            if (DataManager.Instance.AdminQQ > 0)
            {
                desc.Append($"bug反馈请联系QQ:{DataManager.Instance.AdminQQ}");
            }
            MessageManager.SendTextMessage(sourceType, desc.ToString(), qq: qq?.QQ, toGroupNo: member?.GroupNumber);
        }
示例#7
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (permit == PermitType.None)
            {
                MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限忽略用户", fromQQ, toGroup);
                return;
            }

            if (!command.Any())
            {
                return;
            }

            if (!long.TryParse(command[0], out var banQQ))
            {
                return;
            }

            if (GroupIgnore.ContainsKey((member.GroupId, banQQ)))
            {
                UpdateGroupIgnore(member.GroupId, banQQ, false);
                MessageManager.SendTextMessage(MessageSourceType.Group, $"用户{banQQ}在群{member.GroupId}已解除忽略", fromQQ, toGroup);
                return;
            }
示例#8
0
        public static async Task Execute(string command, List <BaseMessage> originMessage, MessageSourceType sourceType, long?qqNo = null, long?groupNo = null)
        {
            UserInfo qq    = null;
            Group    group = null;

            if (qqNo.HasValue)
            {
                qq = UserManager.Get(qqNo.Value);
            }

            GroupMember member = null;

            if (qqNo.HasValue && groupNo.HasValue)
            {
                member = await GroupMemberManager.Get(qqNo.Value, groupNo.Value);

                if (member != null && (DataManager.Instance?.GroupIgnore?.ContainsKey((member.GroupNumber, member.QQ)) ?? false))
                {
                    return;
                }
            }

            if (!command.StartsWith(".") && !command.StartsWith("/"))
            {
                if (sourceType == MessageSourceType.Group)
                {
                    ExecuteWithoutCommand(command, originMessage, sourceType, qq, member);
                }
                return;
            }

            var commandStr  = command.Remove(0, 1);
            var commandList = Tools.TakeCommandParts(commandStr);

            var commandName = commandList.FirstOrDefault();

            if (commandName == null)
            {
                return;
            }

            var manager = GetManagerByCommand(commandName);

            if (manager == null)
            {
                if (sourceType == MessageSourceType.Group)
                {
                    ExecuteWithoutCommand(command, originMessage, sourceType, qq, member);
                }
                return;
            }

            commandList.RemoveAt(0);
            var args = commandList;

            if (sourceType == MessageSourceType.Group)
            {
                if (BanManager.QQBan.TryGetValue(member.QQ, out _))
                {
                    MessageManager.SendTextMessage(sourceType, "滚", member.QQ, member.GroupNumber);
                    return;
                }
                else if (BanManager.GroupBan.TryGetValue((member.QQ, member.GroupNumber), out _))
                {
                    MessageManager.SendTextMessage(sourceType, "滚", member.QQ, member.GroupNumber);
                    return;
                }
            }

            await manager.ExecuteAsync(args, originMessage, sourceType, qq, group, member);
        }
示例#9
0
        private static void ExecuteWithoutCommand(string message, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, GroupMember member)
        {
            var managerList = new List <Tuple <BaseManager, List <string> > >();
            var randomRes   = Random.Next(1, 101);

            if (member != null && RepeatManager.GroupRepeatConfig.ContainsKey(member.GroupNumber))
            {
                var config = RepeatManager.GroupRepeatConfig[member.GroupNumber];
                if (randomRes <= config.Percent)
                {
                    managerList.Add(new Tuple <BaseManager, List <string> >(new RepeatManager(), new List <string>
                    {
                        "repeat", message
                    }));
                }
            }
            if (member != null && ShaDiaoTuManager.GroupShaDiaoTuConfig.ContainsKey(member.GroupNumber))
            {
                var config = ShaDiaoTuManager.GroupShaDiaoTuConfig[member.GroupNumber];
                if (randomRes <= config.Percent)
                {
                    managerList.Add(new Tuple <BaseManager, List <string> >(new ShaDiaoTuManager(), new List <string>
                    {
                        "shadiaotu"
                    }));
                }
            }
            if (member != null && BakiManager.GroupBakiConfig.ContainsKey(member.GroupNumber))
            {
                var config = BakiManager.GroupBakiConfig[member.GroupNumber];
                if (randomRes <= config.Percent)
                {
                    managerList.Add(new Tuple <BaseManager, List <string> >(new BakiManager(), new List <string>
                    {
                        "baki"
                    }));
                }
            }

            if (managerList.Any())
            {
                var choose  = Random.Next(0, managerList.Count);
                var choosen = managerList[choose];
                Task.Run(async() =>
                {
                    await choosen.Item1.ExecuteAsync(choosen.Item2, originMessage, sourceType, qq, null, member);
                });
            }
        }
示例#10
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            if (member == null)
            {
                return;
            }
            var permit = member.PermitType;

            if (permit == PermitType.None)
            {
                return;
            }
            string message = null;

            if (!long.TryParse(command.FirstOrDefault(), out var targetQQ))
            {
                return;
            }

            var targetMember = await GroupMemberManager.Get(targetQQ, member.GroupId);

            if (targetMember == null)
            {
                return;
            }

            var originText = (originMessage.ElementAt(1) is TextMessage tm) ? tm.Text : null;

            if (originText == null)
            {
                return;
            }

            var index       = originText.IndexOf(targetQQ.ToString(), StringComparison.Ordinal) + targetQQ.ToString().Length;
            var newNickName = originText.Length < index + 1 ? null : originText.Substring(index + 1);

            if (string.IsNullOrWhiteSpace(newNickName))
            {
                DelNickName(targetMember, ref message);
            }
            else
            {
                SetNickName(targetMember, newNickName, ref message);
            }

            MessageManager.SendTextMessage(sourceType, message, member.QQ, member.GroupNumber);
        }
示例#11
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var fromQQ  = 0L;
            var toGroup = 0L;
            var message = "";

            if (sourceType == MessageSourceType.Private)
            {
                fromQQ = qq.QQ;
                if (command.Count < 2)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Private, "你不说话我怎么知道你想让我帮你说什么0 0", fromQQ);
                    return;
                }

                if (!long.TryParse(command[0], out toGroup))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Private, "小夜看不明白你想把这段话发到哪", fromQQ);
                    return;
                }

                var mem = await GroupMemberManager.Get(fromQQ, toGroup);

                message = mem.GroupName + string.Join(" ", command.Skip(1));

                MessageManager.SendTextMessage(MessageSourceType.Group, message, fromQQ, toGroup);
            }
            else if (sourceType == MessageSourceType.Group)
            {
                fromQQ  = member.QQ;
                toGroup = member.GroupNumber;
                if (!command.Any())
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "你不说话我怎么知道你想让我帮你说什么0 0", fromQQ, toGroup);
                    return;
                }

                message = member.GroupName + string.Join(" ", command);

                MessageManager.SendTextMessage(MessageSourceType.Group, message, fromQQ, toGroup);
            }
        }
示例#12
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var name = "";

            if (sourceType == MessageSourceType.Group)
            {
                if (member == null)
                {
                    return;
                }

                name = string.IsNullOrWhiteSpace(member.GroupName) ? qq.Name : member.GroupName;
            }
            else if (sourceType == MessageSourceType.Private)
            {
                if (qq == null)
                {
                    return;
                }
                name = qq.Name;
            }

            var str         = $"{name}的疯狂发作 - 临时症状:\n";
            var insaneIndex = DiceManager.RollDice(_tempInsaneList.Count - 1);

            str += $"1d{_tempInsaneList.Count - 1}={insaneIndex}\n";
            var duration = DiceManager.RollDice(10);

            if (insaneIndex == 9)
            {
                var fearIndex = DiceManager.RollDice(_fearList.Count - 1);
                str += string.Format($"症状=>{_tempInsaneList[insaneIndex]}", "1d10=" + duration, $"1d{_fearList.Count - 1}={fearIndex}",
                                     _fearList[fearIndex]);
            }
            else if (insaneIndex == 10)
            {
                var panicIndex = DiceManager.RollDice(_panicList.Count - 1);
                str += string.Format($"症状=>{_tempInsaneList[insaneIndex]}", "1d10=" + duration, $"1d{_panicList.Count - 1}={panicIndex}",
                                     _panicList[panicIndex]);
            }
            else
            {
                str += string.Format($"症状=>{_tempInsaneList[insaneIndex]}", "1d10=" + duration);
            }

            MessageManager.SendTextMessage(sourceType, str, qq?.QQ, member?.GroupNumber);
        }
示例#13
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (!command.Any())
            {
                if (!GroupShaDiaoTuConfig.TryGetValue(toGroup, out var config))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "当前群尚未开启沙雕图功能", fromQQ, toGroup);
                }
                else
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, $"当前沙雕图概率:{config.Percent}%", fromQQ, toGroup);
                }

                return;
            }

            if (command[0].Equals("on", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限开启沙雕图功能", fromQQ, toGroup);
                    return;
                }
                ShaDiaoTuConfig config;

                if (command.Count == 1)
                {
                    config = new ShaDiaoTuConfig();
                }
                else
                {
                    if (int.TryParse(command[1], out var percent))
                    {
                        config = new ShaDiaoTuConfig
                        {
                            Percent = percent > 100 ? 100 : percent
                        };
                    }
                    else
                    {
                        config = new ShaDiaoTuConfig();
                    }
                }


                UpdateGroupShaDiaoTuConfig(toGroup, config);
                MessageManager.SendTextMessage(MessageSourceType.Group, $"随机沙雕图已开启,发图概率:{config.Percent}%", fromQQ, toGroup);
            }
            else if (command[0].Equals("off", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限关闭沙雕图功能", fromQQ, toGroup);
                    return;
                }

                UpdateGroupShaDiaoTuConfig(toGroup, null);
                MessageManager.SendTextMessage(MessageSourceType.Group, "随机沙雕图已关闭", fromQQ, toGroup);
            }
            else if (command[0].Equals("add", StringComparison.CurrentCultureIgnoreCase))
            {
                if (!GroupShaDiaoTuConfig.ContainsKey(toGroup))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "先找人把功能打开啦", fromQQ, toGroup);
                    return;
                }

                if (_lastTime.ContainsKey(fromQQ) && _lastTime[fromQQ] == DateTime.Today &&
                    fromQQ != DataManager.Instance.AdminQQ)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "每人每天只能添加一张", fromQQ, toGroup);
                    return;
                }

                var image = (ImageMessage)originMessage.Find(p => p is ImageMessage);

                if (image == null)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "图呢0 0", fromQQ, toGroup);
                    return;
                }
                //var img = command[1];
                //var match = _imageGuid.Match(img);
                //if (!match.Groups["Guid"].Success)
                //{
                //    MessageManager.SendTextMessage(MessageSourceType.Group, "图呢0 0", fromQQ, toGroup);
                //    return;
                //}

                //var fileName = match.Groups["Guid"].Value;
                //var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp", "image");
                //var iniFileName = Path.Combine(path, Path.GetFileNameWithoutExtension(fileName) + ".ini");
                //if (!File.Exists(iniFileName))
                //{
                //    MessageManager.SendTextMessage(MessageSourceType.Group, "上传失败惹", fromQQ, toGroup);
                //    return;
                //}

                //var fileText = File.ReadAllText(iniFileName);
                //var url = fileText.Split('\n').FirstOrDefault(p => p.StartsWith("url"))?.Substring(4);
                var url = image.Url;
                if (string.IsNullOrWhiteSpace(url))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "上传失败惹", fromQQ, toGroup);
                    return;
                }

                using (var client = new HttpClient())
                {
                    var imgRes = await client.GetAsync(url);

                    var imgItem = System.Drawing.Image.FromStream(await imgRes.Content.ReadAsStreamAsync());

                    var savedPath = Path.Combine(Config.ShaDiaoImagePath, Guid.NewGuid().ToString() + ".png");
                    if (!Directory.Exists(Config.ShaDiaoImagePath))
                    {
                        Directory.CreateDirectory(Config.ShaDiaoImagePath);
                    }

                    imgItem.Save(savedPath);
                }

                MessageManager.SendTextMessage(MessageSourceType.Group, "上传成功", fromQQ, toGroup);
                if (!_lastTime.ContainsKey(fromQQ))
                {
                    _lastTime.Add(fromQQ, DateTime.Today);
                }
                else
                {
                    _lastTime[fromQQ] = DateTime.Today;
                }
            }
            else if (command[0].Equals("shadiaotu", StringComparison.CurrentCultureIgnoreCase))
            {
                var dir = Path.Combine(Config.DataPath, "沙雕图");
                if (!Directory.Exists(dir))
                {
                    return;
                }
                var files = Directory.GetFiles(dir);
                if (!files.Any())
                {
                    return;
                }
                var fileName = files[_rand.Next(0, files.Length)];
                MessageManager.SendImageMessage(sourceType, fileName, fromQQ, toGroup);
            }
        }
示例#14
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var name = "";

            if (sourceType == MessageSourceType.Group)
            {
                if (member == null)
                {
                    _logger.Debug("Jrrp group member is null");
                    return;
                }
                if (_disabledJrrpGroupNumbers.Contains(member.GroupNumber))
                {
                    return;
                }

                name = member.GroupName;
            }
            else if (sourceType == MessageSourceType.Private || sourceType == MessageSourceType.Friend)
            {
                if (qq == null)
                {
                    _logger.Debug("Jrrp qq is null");
                    return;
                }
                name = qq.Name;
            }

            var isReroll = qq.ReRollStep == UserInfo.RerollStep.CanReroll;
            var rp       = GetJrrp(qq, isReroll);

            switch (qq.ReRollStep)
            {
            case UserInfo.RerollStep.None:
                MessageManager.SendTextMessage(sourceType, name + "今天的人品值是:" + rp, qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                return;

            case UserInfo.RerollStep.CanReroll:
                MessageManager.SendTextMessage(sourceType, name + "今天的人品不太好,确定要看的话就再来一次吧", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                return;

            case UserInfo.RerollStep.RerollFaild:
                if (rp == 1)
                {
                    MessageManager.SendTextMessage(sourceType, $"……", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                }
                else
                {
                    MessageManager.SendTextMessage(sourceType, name + $"今天的人品值只有:{rp}", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                }
                return;

            case UserInfo.RerollStep.RerollSuccess:
                MessageManager.SendTextMessage(sourceType, $"啊!对不起刚才是我失误了!{name}今天人品值应该是:{rp}", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                qq.ReRollStep = UserInfo.RerollStep.None;
                return;

            case UserInfo.RerollStep.RerollDevastated:
                if (rp == 1)
                {
                    MessageManager.SendTextMessage(sourceType, $"……", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                }
                else
                {
                    MessageManager.SendTextMessage(sourceType, $"都说了不想告诉你了嘛……{name}今天人品值只有:{rp}", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
                }
                qq.ReRollStep = UserInfo.RerollStep.RerollFaild;
                return;
            }
        }
示例#15
0
        public override async System.Threading.Tasks.Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            var sourceMessageId = (originMessage?.FirstOrDefault() as SourceMessage)?.Id ?? default;
            var messages        = new List <BaseMessage>();

            messages.Add(new QuoteMessage(toGroup, fromQQ, sourceMessageId));

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (originMessage.Count <= 2)
            {
                if (command[0].Equals("on", StringComparison.CurrentCultureIgnoreCase))
                {
                    if (permit == PermitType.None)
                    {
                        MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限开启色图鉴定功能", fromQQ, toGroup);
                        return;
                    }

                    UpdateGroupHentaiCheckConfig(toGroup, true);
                    MessageManager.SendTextMessage(MessageSourceType.Group, "色图鉴定已开启", fromQQ, toGroup);
                    return;
                }
                else if (command[0].Equals("off", StringComparison.CurrentCultureIgnoreCase))
                {
                    if (permit == PermitType.None)
                    {
                        MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限关闭色图鉴定功能", fromQQ, toGroup);
                        return;
                    }

                    UpdateGroupHentaiCheckConfig(toGroup, false);
                    MessageManager.SendTextMessage(MessageSourceType.Group, "色图鉴定已关闭", fromQQ, toGroup);
                    return;
                }
                else if (!GroupHentaiCheckConfig.TryGetValue(toGroup, out var config))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "当前群尚未色图鉴定功能", fromQQ, toGroup);
                    return;
                }
                else
                {
                    messages.Add(new TextMessage("图呢?"));
                    MessageManager.SendMessage(sourceType, messages, fromQQ, toGroup);
                    return;
                }
            }
            else
            {
                if (!(originMessage?.ElementAt(2) is ImageMessage im))
                {
                    messages.Add(new TextMessage("图呢?"));
                    MessageManager.SendMessage(sourceType, messages, fromQQ, toGroup);
                    return;
                }

                var imageUrl = im.Url;
                if (string.IsNullOrWhiteSpace(imageUrl))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "图片上传失败惹", fromQQ, toGroup);
                    return;
                }

                var client = new RestClient();
                client.Timeout = -1;
                var imageDownloadRequest = new RestRequest(imageUrl, Method.GET);
                var imgRes = await client.ExecuteAsync(imageDownloadRequest);

                if (!imgRes.IsSuccessful)
                {
                    MessageManager.SendTextMessage(sourceType, "请求失败了QAQ", fromQQ, toGroup);
                    return;
                }

                var savedPath = Path.Combine(Config.TempPath, Guid.NewGuid() + ".png");

                var uploadRequest = new RestRequest("https://checkimage.querydata.org/api", Method.POST)
                {
                    AlwaysMultipartFormData = true
                };
                uploadRequest.AddFileBytes("image", imgRes.RawBytes, savedPath, contentType: imgRes.ContentType);
                var res = await client.ExecuteAsync(uploadRequest);

                if (!res.IsSuccessful)
                {
                    MessageManager.SendTextMessage(sourceType, "请求失败了QAQ", fromQQ, toGroup);
                    return;
                }

                var strContent = res.Content;
                var jsonRes    =
                    Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(strContent, new List <HentaiCheckModel>());

                if (jsonRes == null || !jsonRes.Any())
                {
                    MessageManager.SendTextMessage(sourceType, "请求失败了QAQ", fromQQ, toGroup);
                    return;
                }

                var messageText = "没鉴定出来><";
                var result      = jsonRes.OrderByDescending(p => p.Probability).FirstOrDefault();
                switch (result?.ClassName)
                {
                case "Drawing":
                case "Neutral":
                    messageText = "这不是挺健全的嘛";
                    break;

                case "Hentai":
                    messageText = "色疯辣!";
                    break;

                case "Sexy":
                    messageText = "我超,太烧啦!";
                    break;

                case "P**n":
                    messageText = "你完了,我这就叫狗管理来抓你";
                    break;
                }

                messages.Add(new TextMessage(messageText));
                MessageManager.SendMessage(sourceType, messages, fromQQ, toGroup);
            }
        }
示例#16
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            if (member == null)
            {
                return;
            }
            var    newNickName = (originMessage.ElementAt(1) is TextMessage tm) && tm.Text?.Length > 3 ? tm.Text?.Substring(4) : null;
            string message     = null;

            if (string.IsNullOrWhiteSpace(newNickName))
            {
                DelNickName(member, ref message);
            }
            else
            {
                SetNickName(member, newNickName, ref message);
            }

            MessageManager.SendTextMessage(sourceType, message, member.QQ, member.GroupNumber);
        }
示例#17
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            MessageManager.SendTextMessage(sourceType, "略略略😝", qq: qq?.QQ, toGroupNo: member?.GroupNumber);
            return;
        }
示例#18
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (permit == PermitType.None)
            {
                MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限封禁用户", fromQQ, toGroup);
                return;
            }

            if (!command.Any())
            {
                return;
            }

            if (!long.TryParse(command[0], out var banQQ))
            {
                return;
            }

            if (command.Count > 1 && long.TryParse(command[1], out var banGroup))
            {
                if (GroupBan.ContainsKey((banGroup, banQQ)))
                {
                    UpdateGroupQQBan(banGroup, banQQ, false);
                    MessageManager.SendTextMessage(MessageSourceType.Group, $"用户{banQQ}在群{banGroup}的封禁已被解除", fromQQ, toGroup);
                    return;
                }
                else
                {
                    UpdateGroupQQBan(banGroup, banQQ, true);
                    MessageManager.SendTextMessage(MessageSourceType.Group, $"用户{banQQ}在群{banGroup}已被封禁", fromQQ, toGroup);
                    return;
                }
            }
示例#19
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (!command.Any())
            {
                if (!GroupBakiConfig.TryGetValue(toGroup, out var config))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "当前群尚未开启热狗图功能", fromQQ, toGroup);
                }
                else
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, $"当前热狗人纯度:{config.Percent}%", fromQQ, toGroup);
                }

                return;
            }

            if (command[0].Equals("on", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限开启热狗图功能", fromQQ, toGroup);
                    return;
                }
                BakiConfig config;

                if (command.Count == 1)
                {
                    config = new BakiConfig();
                }
                else
                {
                    if (int.TryParse(command[1], out var percent))
                    {
                        config = new BakiConfig
                        {
                            Percent = percent > 100 ? 100 : percent
                        };
                    }
                    else
                    {
                        config = new BakiConfig();
                    }
                }

                UpdateGroupBakiConfig(toGroup, config);
                MessageManager.SendTextMessage(MessageSourceType.Group, $"随机热狗图已开启,提升纯度概率:{config.Percent}%", fromQQ, toGroup);
            }
            else if (command[0].Equals("off", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限关闭热狗图功能", fromQQ, toGroup);
                    return;
                }

                UpdateGroupBakiConfig(toGroup, null);
                MessageManager.SendTextMessage(MessageSourceType.Group, "随机热狗图已关闭", fromQQ, toGroup);
            }
            else if (command[0].Equals("baki", StringComparison.CurrentCultureIgnoreCase))
            {
                var dir = Path.Combine(Config.DataPath, "Baki");
                if (!Directory.Exists(dir))
                {
                    return;
                }
                var files = Directory.GetFiles(dir);
                if (!files.Any())
                {
                    return;
                }
                var fileName = files[_rand.Next(0, files.Length)];
                MessageManager.SendImageMessage(sourceType, fileName, fromQQ, toGroup);
            }
        }
示例#20
0
 public abstract Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member);
示例#21
0
        public override async System.Threading.Tasks.Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (!command.Any())
            {
                if (!GroupTodayHistoryConfig.TryGetValue(toGroup, out var config))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "当前群尚未开启历史上的今天功能", fromQQ, toGroup);
                    return;
                }
            }
            else
            {
                if (command[0].Equals("on", StringComparison.CurrentCultureIgnoreCase))
                {
                    if (permit == PermitType.None)
                    {
                        MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限开启历史上的今天功能", fromQQ, toGroup);
                        return;
                    }

                    UpdateGroupTodayHistoryConfig(toGroup, true);
                    MessageManager.SendTextMessage(MessageSourceType.Group, "历史上的今天功能已开启", fromQQ, toGroup);
                    return;
                }
                else if (command[0].Equals("off", StringComparison.CurrentCultureIgnoreCase))
                {
                    if (permit == PermitType.None)
                    {
                        MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限关闭历史上的今天功能", fromQQ, toGroup);
                        return;
                    }

                    UpdateGroupTodayHistoryConfig(toGroup, false);
                    MessageManager.SendTextMessage(MessageSourceType.Group, "历史上的今天已关闭", fromQQ, toGroup);
                    return;
                }
            }

            using (var client = new HttpClient())
            {
                var url = "https://news.topurl.cn/api";
                var res = await client.GetAsync(url);

                if (!res.IsSuccessStatusCode)
                {
                    MessageManager.SendTextMessage(sourceType, "请求失败了QAQ", fromQQ, toGroup);
                    return;
                }

                var strContent = await res.Content.ReadAsStringAsync();

                var jsonRes = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(strContent, new
                {
                    data = new
                    {
                        historyList = new List <TodayHistoryModel>()
                    }
                });

                if (!(jsonRes?.data?.historyList?.Any() ?? false))
                {
                    MessageManager.SendTextMessage(sourceType, "没找到数据捏", fromQQ, toGroup);
                    return;
                }

                var news    = jsonRes.data.historyList.Take(4).ToList();
                var message = new List <string>();
                news.ForEach(n =>
                {
                    message.Add($"{n.Event}");
                });

                MessageManager.SendTextMessage(sourceType, string.Join("\n", message), fromQQ, toGroup);
            }
        }
示例#22
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group groupNo, GroupMember member)
        {
            await Task.Yield();

            throw new NotImplementedException();
        }
示例#23
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            var sourceMessageId = (originMessage?.FirstOrDefault() as SourceMessage)?.Id ?? default;
            var messages        = new List <BaseMessage>();

            messages.Add(new QuoteMessage(member?.GroupNumber, qq?.QQ, sourceMessageId));

            await Task.Yield();

            if (command.Count < 1)
            {
                messages.Add(new TextMessage("不提问怎么帮你选0 0?"));
                MessageManager.SendMessage(sourceType, messages, qq?.QQ, member?.GroupNumber);
                return;
            }

            if (command.Count < 2)
            {
                messages.Add(new TextMessage("快把你打算的选择告诉我"));
                MessageManager.SendMessage(sourceType, messages, qq?.QQ, member?.GroupNumber);
                return;
            }
            var quest = command.First();

            command.RemoveAt(0);
            var ansStr  = string.Join(" ", command);
            var ans     = ansStr.Split('|').ToList();
            var res     = Ask(ans);
            var message = $"关于[{quest}]:\n" + string.Join("\n", res.Select(p => $"{p.Quest}:{p.Percent}%")) + "\n"
                          + $"小夜觉得{string.Join("、", GetMax(res).Select(p => p.Quest))}比较好";

            messages.Add(new TextMessage(message));
            MessageManager.SendMessage(sourceType, messages, qq?.QQ, member?.GroupNumber);
        }
示例#24
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            var fromQQ  = 0L;
            var toGroup = 0L;

            //var message = "";
            if (sourceType != MessageSourceType.Group)
            {
                return;
            }

            fromQQ  = member.QQ;
            toGroup = member.GroupNumber;
            var permit = member.PermitType;

            if (!command.Any())
            {
                if (!GroupRepeatConfig.TryGetValue(toGroup, out var config))
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "当前群尚未开启复读功能", fromQQ, toGroup);
                }
                else
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, $"当前复读概率:{config.Percent}%", fromQQ, toGroup);
                }

                return;
            }

            if (command[0].Equals("on", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限开启复读功能", fromQQ, toGroup);
                    return;
                }
                RepeatConfig config;

                if (command.Count == 1)
                {
                    config = new RepeatConfig();
                }
                else
                {
                    if (int.TryParse(command[1], out var percent))
                    {
                        config = new RepeatConfig
                        {
                            Percent = percent > 100 ? 100 : percent
                        };
                    }
                    else
                    {
                        config = new RepeatConfig();
                    }
                }

                UpdateGroupRepeatConfig(toGroup, config);

                MessageManager.SendTextMessage(MessageSourceType.Group, $"复读已开启,复读概率:{config.Percent}%", fromQQ, toGroup);
            }
            else if (command[0].Equals("off", StringComparison.CurrentCultureIgnoreCase))
            {
                if (permit == PermitType.None)
                {
                    MessageManager.SendTextMessage(MessageSourceType.Group, "只有群主或管理员才有权限关闭复读功能", fromQQ, toGroup);
                    return;
                }

                UpdateGroupRepeatConfig(toGroup, null);
                MessageManager.SendTextMessage(MessageSourceType.Group, "复读已关闭", fromQQ, toGroup);
            }
            else if (command[0].Equals("repeat", StringComparison.CurrentCultureIgnoreCase) && command.Count > 1)
            {
                MessageManager.SendMessage(MessageSourceType.Group, originMessage, fromQQ, toGroup);
            }
        }
示例#25
0
        public override async Task ExecuteAsync(List <string> command, List <BaseMessage> originMessage, MessageSourceType sourceType, UserInfo qq, Group group, GroupMember member)
        {
            await Task.Yield();

            if (sourceType != MessageSourceType.Private && sourceType != MessageSourceType.Friend)
            {
                return;
            }
            if (qq == null || qq.QQ != DataManager.Instance.AdminQQ)
            {
                return;
            }
            var firstCommand = command.FirstOrDefault();

            if (firstCommand == null)
            {
                return;
            }
            switch (firstCommand.ToLower())
            {
            case "say":
            {
                command.RemoveAt(0);
                if (command.Count < 2)
                {
                    return;
                }
                var groupNumber = 0L;
                if (!long.TryParse(command.First(), out groupNumber))
                {
                    return;
                }

                command.RemoveAt(0);
                var message = string.Join(" ", command);
                MessageManager.SendTextMessage(MessageSourceType.Group, message, qq?.QQ, groupNumber);
                return;
            }

            case "rename":
                command.RemoveAt(0);
                if (command.Count < 1)
                {
                    return;
                }
                var name = command[0];
                DataManager.Instance.BotName = name;
                MessageManager.SendTextMessage(MessageSourceType.Friend, "改名成功", qq?.QQ);
                return;

            case "save":
                DataManager.Save();
                MessageManager.SendTextMessage(MessageSourceType.Friend, "保存成功", qq?.QQ);
                return;
            }
        }