Exemplo n.º 1
0
        /// <summary>
        /// 正常模式的回复
        /// 正常模式不会进行随机拼句回复,而是尽量爬取网上的有用信息来回应
        /// </summary>
        /// <param name="user"></param>
        /// <param name="question"></param>
        /// <returns></returns>
        string getAnswerNormal(long user, string question)
        {
            string answer = "";
            string msg    = "";

            answer = baidu.getZhidaoAnswer(question);
            if (answer.Length > 0)
            {
                msg = answer + "...";
            }
            if (modes.rand.Next(0, 100) > 75 || msg.Length <= 0)
            {
                try
                {
                    var tiebares = baidu.getBaiduTiebaAnswers(question);
                    if (tiebares.Length > 0)
                    {
                        string tiebaanswer = tiebares[modes.rand.Next(0, tiebares.Length)].Trim();
                        msg = tiebaanswer;
                        //sendPrivate(masterQQ, question + "\r\n\r\n" + tiebaanswer);
                    }
                }
                catch (Exception e)
                {
                    FileIOActor.log(e.Message + "\r\n" + e.StackTrace);
                }
            }
            if (msg.Length <= 0)
            {
                msg = modes.getSaoHua();
            }

            return(msg);
        }
Exemplo n.º 2
0
        /// <summary>
        /// bot各类所需资源的初始化
        /// 这里会保证全局只初始化一遍
        /// </summary>
        public void tryInit()
        {
            lock (dealmsgMutex)
            {
                if (!inited)
                {
                    try
                    {
                        if (Directory.Exists(rootDict + historyPath))
                        {
                            Directory.CreateDirectory(rootDict + historyPath);
                        }

                        modes.init(rootDict + DataModePath);
                        baidu.init(rootDict + DataBaiduPath);
                        proof.init(rootDict + DataProofPath);
                        weather.init(rootDict + DataWeatherPath);

                        userBlacklist  = new Dictionary <long, long>();
                        groupBlacklist = new Dictionary <long, long>();
                        groupWhitelist = new Dictionary <long, long>();
                        List <string> userblacklistlines = FileIOActor.readLines(rootDict + userBlacklistFile).ToList();
                        foreach (var line in userblacklistlines)
                        {
                            var uitem = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
                            if (uitem.Length >= 2)
                            {
                                userBlacklist[long.Parse(uitem[0])] = long.Parse(uitem[1]);
                            }
                        }
                        List <string> groupblacklistlines = FileIOActor.readLines(rootDict + groupBlacklistFile).ToList();
                        foreach (var line in groupblacklistlines)
                        {
                            groupBlacklist[long.Parse(line)] = 0;
                        }
                        List <string> groupwhitelistlines = FileIOActor.readLines(rootDict + groupWhitelistFile).ToList();
                        foreach (var line in groupwhitelistlines)
                        {
                            groupWhitelist[long.Parse(line)] = 0;
                        }
                        askname = FileIOActor.readLines(rootDict + asknameFile).ToList();
                        inited  = true;
                    }
                    catch (Exception e)
                    {
                        FileIOActor.log(e.Message + "\r\n" + e.StackTrace);
                        inited = false;
                    }
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 记录群/私人聊天信息到文件中
 /// </summary>
 /// <param name="group"></param>
 /// <param name="user"></param>
 /// <param name="msg"></param>
 void saveMsg(long group, long user, string msg)
 {
     lock (savemsgMutex)
     {
         try
         {
             string time = DateTime.Now.ToString("yyyy-MM-dd_HH:mm:ss");
             if (user == myQQ)
             {
                 time += "[me]";
             }
             if (group <= 0)
             {
                 // private
                 string ppath = $"{rootDict}{historyPath}\\private\\";
                 if (!Directory.Exists(ppath))
                 {
                     Directory.CreateDirectory(ppath);
                 }
                 File.AppendAllText($"{ppath}{user}.txt", $"{time}\t{msg}\r\n", Encoding.UTF8);
             }
             else
             {
                 // group
                 string ppath = $"{rootDict}{historyPath}\\group\\";
                 if (!Directory.Exists(ppath))
                 {
                     Directory.CreateDirectory(ppath);
                 }
                 string gfile = $"{ppath}{group}.txt";
                 if (!File.Exists(gfile))
                 {
                     // 第一次入群,主动发一下自我介绍
                     sendGroup(group, -1, getWelcomeString());
                 }
                 File.AppendAllText(gfile, $"{time}\t{user}\t{msg}\r\n", Encoding.UTF8);
             }
         }
         catch (Exception e)
         {
             FileIOActor.log(e.Message + "\r\n" + e.StackTrace);
         }
     }
 }
Exemplo n.º 4
0
        ///
        /// 面对输入的逻辑:
        /// -0 若未初始化,先初始化
        /// 0 记录聊天内容
        /// 1 先检查群聊中是否需要我响应该消息,并过滤掉at的指令等(如果私聊则跳过这一步)
        /// 2 检查对方权限,作对应忽略
        /// 3 按内容处理
        /// 4 记录输出的聊天内容
        ///


        /// <summary>
        /// 判断是否回复特定qq号的消息
        /// 根据ignore文件内的配置来作判断
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        bool allowuser(long user)
        {
            if (DateTime.Now.Minute == 0)
            {
                // 整小时,重置互乐次数
                lock (userblackMutex)
                {
                    try
                    {
                        userBlacklist = new Dictionary <long, long>();
                        List <string> userlines = FileIOActor.readLines(rootDict + userBlacklistFile).ToList();
                        foreach (var line in userlines)
                        {
                            var item = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
                            if (item.Length >= 2)
                            {
                                userBlacklist[long.Parse(item[0])] = long.Parse(item[1]);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        FileIOActor.log(e.Message + "\r\n" + e.StackTrace);
                    }
                }
            }

            if (userBlacklist.Keys.Contains(user))
            {
                long lefttime = userBlacklist[user];
                log(lefttime.ToString());
                if (lefttime > 0)
                {
                    userBlacklist[user] = lefttime - 1;
                    log(userBlacklist[user].ToString());
                    return(true);
                }
                log("igore..");
                return(false);
            }
            log("no ignore" + user.ToString());
            return(true);
        }