public override int ProcessGroupMemberIncrease(int subType, int sendTime, long fromGroup, long fromQq, long target) { CoolQApi.SendGroupMsg(fromGroup, $"{CoolQCode.At(fromQq)}\r\n新人捐赠时间,一分也是情,一分也是爱\r\nhttp://git.oschina.net/yks/Newbe.CQP.Framework\r\n{CoolQCode.Image("image.jpg")}"); return(base.ProcessGroupMemberIncrease(subType, sendTime, fromGroup, fromQq, target)); }
private void printOutput(QQInfo info) { long qqnum = info.qq; //截断输出内容,分段输出,防止其超过插件限制的字数 int maxlen = 50; if (info.info.Length > maxlen) { info.info = info.info.Substring(0, maxlen) + "..."; } if (info.isgroup) { CoolQApi.SendGroupMsg(qqnum, info.info); } else { CoolQApi.SendPrivateMsg(qqnum, info.info); } //for (int i = 0; i <= info.info.Length / maxlen; i++) //{ // string tmpstr = ""; // if (info.info.Length <= i * maxlen + maxlen) // { // tmpstr = info.info.Substring(i * maxlen, info.info.Length - i * maxlen); // } // else // { // tmpstr = info.info.Substring(i * maxlen, maxlen); // } // if (info.isgroup) CoolQApi.SendGroupMsg(qqnum, tmpstr); // else CoolQApi.SendPrivateMsg(qqnum, tmpstr); //} }
/// <summary> /// 处理群成员添加事件 /// </summary> /// <param name="subType">事件类型。1为管理员已同意;2为管理员邀请</param> /// <param name="sendTime">事件发生时间的时间戳</param> /// <param name="fromGroup">事件来源群号</param> /// <param name="fromQq">事件来源QQ</param> /// <param name="target">被操作的QQ</param> /// <returns></returns> public override int ProcessGroupMemberIncrease(int subType, int sendTime, long fromGroup, long fromQq, long target) { //mainForm.displayMsg2("处理群成员添加事件:" + subType + "," + sendTime + "," + fromGroup + "," + fromQq + "," + target); if (!string.IsNullOrWhiteSpace(CacheData.BaseJson.NewerEnterQun)) { string content = CacheData.BaseJson.NewerEnterQun.Replace("{@新用户}", CoolQCode.At(target)); //成员添加后,进行@用户,外加欢迎与 if (subType == 1)//账号为管理员,同意群员入群后触发 { //CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(target) + "欢迎加入我们的大家庭"); //mainForm.displayMsg2("---给用户发送欢迎语:"+ CoolQCode.At(target) + "欢迎加入我们的大家庭"); CoolQApi.SendGroupMsg(fromGroup, content); } else if (subType == 2)//群员邀请好友,好友同意并入群后触发 { //CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + "邀请" + CoolQCode.At(target) + "加入我们的大家庭,热烈欢迎"); //mainForm.displayMsg2("---给用户发送欢迎语:" + CoolQCode.At(fromQq) + "邀请" + CoolQCode.At(target) + "加入我们的大家庭,热烈欢迎"); CoolQApi.SendGroupMsg(fromGroup, content); } } return(base.ProcessGroupMemberIncrease(subType, sendTime, fromGroup, fromQq, target)); }
public override int ProcessGroupMessage(int subType, int sendTime, long fromGroup, long fromQq, string fromAnonymous, string msg, int font) { if (msg.Contains("debug")) { string[] cmd = msg.Split(' '); if (cmd[0] != "debug") { return(1); } if (cmd[1] == "time") { string send = "debug info:"; foreach (string key in RunTimeCfg.Keys) { ListenRunTimeConfig cfg = (ListenRunTimeConfig)RunTimeCfg[key]; if (cfg.QQGroups.Contains(fromGroup)) { send += string.Format("\r\n{0}:{1}[{2}]", cfg.IdolName, cfg.UpdateTime.ToString(), key); } CoolQApi.SendGroupMsg(fromGroup, send); } } if (cmd[1] == "restart") { string key = cmd[2]; if (RunProject.ContainsKey(key)) { RunProject.Remove(key); } Common.StartListenRoomTask(key); CoolQApi.SendGroupMsg(fromGroup, key + "任务重建完毕,请查看酷Q日志配合time命令查看是否恢复任务"); } } return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); }
/// <summary> /// 处理群消息方法 /// </summary> /// <param name="obj"></param> private void DealWithGroupMessage(object obj) { try { object[] paramaters = (object[])obj; long fromGroup = (long)paramaters[2]; long fromQq = (long)paramaters[3]; string msg = (string)paramaters[5]; if (!m_QQdics.ContainsKey(fromGroup)) { //获取群成员 需要api权限160 List <GroupMemberInfo> memebers = CoolQApi.GetGroupMemberList(fromGroup).Model.ToList(); m_QQdics.Add(fromGroup, memebers.Select(t => t.Number).ToList()); } List <long> qqList = CheckHasAtQQ(m_QQdics[fromGroup], msg); if (qqList.Count > 0) { //禁言部分 if (msg.Contains("禁言") || msg.Contains("闭嘴") || msg.Contains("别说话") || msg.Contains("让你说话了么") || msg.Contains("ShutUp")) { foreach (var targetqq in qqList) { //全体成员跳过 if (targetqq == -1) { continue; } //对该机器人 if (targetqq == CoolQApi.GetLoginQQ()) { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + " 小逼,想禁言我?找死是吧!3分钟不谢!"); CoolQApi.SetGroupBan(fromGroup, fromQq, 180); break; } //成功概率1/3 bool success = m_Rand.Next(4200) % 3 == 1; if (success) { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + "对" + CoolQCode.At(targetqq) + "释放了禁言术! 成功了! " + CoolQCode.At(targetqq) + "被禁言3分钟!"); CoolQApi.SetGroupBan(fromGroup, targetqq, 180); } else { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + "对" + CoolQCode.At(targetqq) + "释放了禁言术! 但是什么都没有发生!"); } } } //踢出群部分 if (msg.Contains("滚") || msg.Contains("KickOut") || msg.Contains("踢了") || msg.Contains("飞踢") || msg.Contains("ThaiKick")) { foreach (var targetqq in qqList) { //全体成员跳过 if (targetqq == -1) { continue; } //对该机器人 if (targetqq == CoolQApi.GetLoginQQ()) { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + " 小逼,想踢我?找死是吧!翻滚吧!"); CoolQApi.SetGroupKick(fromGroup, fromQq, false); break; } //成功概率1/5 bool success = m_Rand.Next(4200) % 5 == 1; if (success) { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + "狠狠踢了" + CoolQCode.At(targetqq) + "一脚! " + CoolQCode.At(targetqq) + "飞了好远,直到飞出了群"); CoolQApi.SetGroupKick(fromGroup, targetqq, false); } else { CoolQApi.SendGroupMsg(fromGroup, CoolQCode.At(fromQq) + "想要狠狠踢" + CoolQCode.At(targetqq) + "一脚,结果没有踢着,把脚崴了。好惨!"); } } } } } catch (Exception e) { CoolQApi.AddLog(1, CoolQLogLevel.Error, e.Message); } }
public void GetLive() { try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri("https://plive.48.cn/livesystem/api/live/v1/memberLivePage")); req.Method = "POST"; req.UserAgent = "kd listen"; req.Headers.Add("token", "0"); JObject rss = new JObject( new JProperty("lastTime", 0), new JProperty("limit", 20), new JProperty("groupId", 0), new JProperty("memberId", 0), new JProperty("type", 1), new JProperty("giftUpdTime", 1490857731000) ); #region 数据请求 返回strResult:string string postJson = rss.ToString(); byte[] bytes = Encoding.UTF8.GetBytes(postJson); req.ContentType = "application/json"; req.ContentLength = bytes.Length; Stream reqstream = req.GetRequestStream(); reqstream.Write(bytes, 0, bytes.Length); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); Stream streamReceive = response.GetResponseStream(); Encoding encoding = Encoding.UTF8; StreamReader streamReader = new StreamReader(streamReceive, encoding); string strResult = streamReader.ReadToEnd(); streamReceive.Dispose(); streamReader.Dispose(); #endregion JObject json = JObject.Parse(strResult); if ((int)json["status"] == 200) { IEnumerable <JToken> datas = json.SelectTokens("$.content.liveList[*]"); foreach (JToken liveInfo in datas) { if (LiveMsgCache.ContainsKey(liveInfo["liveId"])) { break; } //懒得想算法了,直接很粗暴的按的字分割了 //title字段师xxx的直播间/电台,所以上面的idcache就直接看看有没有这个键,有的话直接推送了 string[] name = liveInfo["title"].ToString().Split(new string[] { "的" }, StringSplitOptions.RemoveEmptyEntries); if (MemberIdCache.ContainsKey(name[0])) { File.AppendAllText("LiveError.log", "捕获:" + liveInfo["liveId"] + "\r\n"); LiveMsgCache.Add(liveInfo["liveId"], 1); CoolQApi.SendGroupMsg(long.Parse(MemberIdCache[name[0]].ToString()), "直播提醒:\r\n你的小偶像" + name[0] + "开了一个" + name[1] + "\r\n请尽量打开口袋48观看!\r\n不方便的同学可以使用KD for PC(非官方)观看或打开网址登陆:https://h5.48.cn/2017appshare/memberLiveShare/index.html?id=" + liveInfo["liveId"]); } } } } catch (Exception ex) { File.AppendAllText("LiveError.log", ex.ToString() + "\r\n" + ex.StackTrace + ex.Data + "\r\n"); } }
public void GetRoomMsg(ListenConfig listenConfig) { try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri("https://pjuju.48.cn/imsystem/api/im/v1/member/room/message/chat")); req.Method = "POST"; req.UserAgent = "okhttp/3.4.1"; JObject rss = new JObject( new JProperty("roomId", listenConfig.KDRoomId), new JProperty("lastTime", 0), new JProperty("limit", 10) ); string postJson = rss.ToString(); byte[] bytes = Encoding.UTF8.GetBytes(postJson); req.ContentType = "application/json"; req.ContentLength = bytes.Length; Stream reqstream = req.GetRequestStream(); reqstream.Write(bytes, 0, bytes.Length); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); Stream streamReceive = response.GetResponseStream(); Encoding encoding = Encoding.UTF8; StreamReader streamReader = new StreamReader(streamReceive, encoding); string strResult = streamReader.ReadToEnd(); streamReceive.Dispose(); streamReader.Dispose(); JObject json = JObject.Parse(strResult); if ((int)json["status"] == 200) { IEnumerable <JToken> datas = json.SelectTokens("$.content.data[*]"); //记录本次最大时间戳 long tmpTime = 0; foreach (JToken msgs in datas) { //历史最后时间戳比对 if ((long)msgs["msgTime"] > listenConfig.Lasttime) { //本次消息时间 if ((long)msgs["msgTime"] > tmpTime) { tmpTime = (long)msgs["msgTime"]; } JObject msg = JObject.Parse(msgs["extInfo"].ToString()); //首次运行,直接退出循环 if (listenConfig.First) { break; } if ((long)msgs["msgTime"] < listenConfig.Lasttime) { break; } switch (msg["messageObject"].ToString()) { case "deleteMessage": //CQ.SendGroupMessage(qqGroup,"你的小偶像删除了一条口袋房间的消息"); break; case "text": CoolQApi.SendGroupMsg(listenConfig.QQGroup, String.Format("口袋房间:\r\n{0}:{1}\r\n发送时间:{2}", msg["senderName"].ToString(), msg["text"].ToString(), msgs["msgTimeStr"].ToString())); break; case "image": JObject img = JObject.Parse(msgs["bodys"].ToString()); string imgFilename = GetImage(img["url"].ToString()); if (imgFilename == "") { return; } CoolQApi.SendGroupMsg(listenConfig.QQGroup, String.Format("口袋房间:\r\n{0}:\r\n{1}", msg["senderName"].ToString(), CoolQCode.Image(imgFilename))); break; case "faipaiText": CoolQApi.SendGroupMsg(listenConfig.QQGroup, String.Format("口袋房间:\r\n翻牌辣!{3}:{4}\r\n{0} 回复:{1}\r\n被翻牌的大佬不来集资一发吗?" + listenConfig.HitYouText + " \r\n发送时间:{2}", msg["senderName"].ToString(), msg["messageText"].ToString(), msgs["msgTimeStr"].ToString(), msg["faipaiName"].ToString(), msg["faipaiContent"].ToString())); break; case "audio": JObject audio = JObject.Parse(msgs["bodys"].ToString()); string audioFilename = GetAudio(audio["url"].ToString(), audio["ext"].ToString()); if (audioFilename == "") { return; } CoolQApi.SendGroupMsg(listenConfig.QQGroup, String.Format("口袋房间:\r\n{0}:\r\n{1}", msg["senderName"].ToString(), CoolQCode.ShareRecord(audioFilename))); break; case "videoRecord": JObject video = JObject.Parse(msgs["bodys"].ToString()); CoolQApi.SendGroupMsg(listenConfig.QQGroup, string.Format("{0}发送了一个视频,请点击下面链接查看\r\n地址:{1}", msg["senderName"].ToString(), video["url"].ToString())); break; default: CoolQApi.SendGroupMsg(listenConfig.QQGroup, "你的小偶像有一条新消息,TeemoBot无法支持该类型消息,请打开口袋48查看~~并向开发反馈下~谢谢~"); break; } } } if (tmpTime != 0) { listenConfig.Lasttime = tmpTime; } } if (listenConfig.First) { listenConfig.First = false; } } catch (Exception ex) { File.AppendAllText("error.log", DateTime.Now.ToString() + "\r\n" + ex.ToString() + "\r\n" + ex.StackTrace + "\r\n"); } }
/// <summary> /// 处理群聊消息 /// </summary> /// <param name="subType">消息类型,目前固定为1</param> /// <param name="sendTime">消息发送时间的时间戳</param> /// <param name="fromGroup">消息来源群号</param> /// <param name="fromQq">发送此消息的QQ号码</param> /// <param name="fromAnonymous">发送此消息的匿名用户</param> /// <param name="msg">消息内容</param> /// <param name="font">消息所使用字体</param> /// <returns></returns> public override int ProcessGroupMessage(int subType, int sendTime, long fromGroup, long fromQq, string fromAnonymous, string msg, int font) { MyDictionaryUtil <long, int> myDictionaryUtil = new MyDictionaryUtil <long, int>(); int result = myDictionaryUtil.GetValue(CacheData.BaseJson.CheckedQQQun, fromGroup); //说明用户回复的是指定的关键词 string replayContent2 = null; if (result == 1)//监控此群 { try { replayContent2 = CacheData.BaseJson.Keys[msg + "-##-1-##-1"]; CoolQApi.SendGroupMsg(fromGroup, replayContent2); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } catch (KeyNotFoundException ke) { try { replayContent2 = CacheData.BaseJson.Keys[msg + "-##-1-##-0"]; CoolQApi.SendGroupMsg(fromGroup, replayContent2); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } catch (KeyNotFoundException ke2) { } } } result = myDictionaryUtil.GetValue(CacheData.MovieConfig.CheckedQQQun, fromGroup); if (result == 1) { // string contentStr = msg.Trim(); bool b = true; if (CacheData.MovieConfig.IsNeed) { string at = CoolQCode.At(CoolQApi.GetLoginQQ()); if (msg.StartsWith(at))//需@机器人触发指令 { contentStr = contentStr.Replace(at, ""); contentStr = contentStr.Trim(); } else { b = false; } } if (b) { if (contentStr.StartsWith(CacheData.MovieConfig.SearchCommand)) { String url = ""; try { string searchContent = contentStr.Substring(1); if (string.IsNullOrWhiteSpace(searchContent)) { //CoolQApi.SendPrivateMsg(fromQQ, "请输入要搜索的内容,例如:搜黑豹"); //CoolQApi.SendPrivateMsg(fromQQ, CacheData.MovieConfig.NoSearchedMovie); replayContent2 = CacheData.MovieConfig.NoSearchedMovieInQun; replayContent2 = replayContent2.Replace("{@用户}", CoolQCode.At(fromQq)); CoolQApi.SendGroupMsg(fromGroup, replayContent2); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } else { //CoolQApi.SendPrivateMsg(fromQQ, "正在寻找资源,请稍等..."); List <KunyunInfo> list = KuYunSearch.Search(searchContent, CacheData.MovieConfig.ConvertLinkIndex); if (list == null || list.Count == 0) { //CoolQApi.SendPrivateMsg(fromQQ, "暂时未找到此资源"); string temp = CacheData.MovieConfig.NoSearchedMovieInQun; temp = temp.Replace("{@用户}", CoolQCode.At(fromQq)); CoolQApi.SendGroupMsg(fromGroup, temp); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } else if (list.Count == 1)//说明找到了具体电影的链接 { string replayContent = CacheData.MovieConfig.HaveSearchedMovieInQun; StringBuilder sb = new StringBuilder(" "); foreach (KunyunInfo k in list) { replayContent = replayContent.Replace("{电影名}", k.name); foreach (MovieInfo2 res in k.url) { if (k.resourceTYpe == 1)//m3u8 { sb.Append(res.MovieName + " " + MyLinkCoverter.CovertUrlInSuoIm(res.Url, true) + Environment.NewLine); } else//直接观看链接 { sb.Append(res.MovieName + " " + MyLinkCoverter.CovertUrlInSuoIm(res.Url, false) + Environment.NewLine); } } } replayContent = replayContent.Replace("{电影链接}", sb.ToString()); replayContent = replayContent.Replace("{@用户}", CoolQCode.At(fromQq)); CoolQApi.SendGroupMsg(fromGroup, replayContent); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } else//说明找到了相关的好几个电影 { StringBuilder sb = new StringBuilder("我找到了多个相关资源,请保持搜索格式,聊天回复以下具体某个资源获取观影链接:" + Environment.NewLine); foreach (KunyunInfo k in list) { sb.Append(CacheData.MovieConfig.SearchCommand + k.name + Environment.NewLine); } CoolQApi.SendGroupMsg(fromGroup, sb.ToString()); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } } } catch (Exception e2) { //CoolQApi.SendPrivateMsg(fromQQ, "小喵出现问题,请过会再来尝试"); MyLogUtil.ErrToLog("接收群聊信息后处理过程出现异常,原因:" + e2); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); } } } } //mainForm.displayMsg2("处理群聊消息:" + subType + "," + sendTime + "," + fromGroup + "," + fromQq + "," + fromAnonymous + "," + msg + "," + font); return(base.ProcessGroupMessage(subType, sendTime, fromGroup, fromQq, fromAnonymous, msg, font)); }