NutzCN Logo
精华 [悬赏]做一个QQ机器人,对接论坛的search接口
发布于 2908天前 作者 wendal 4026 次浏览 复制 上一个帖子 下一个帖子
标签:

金额: 100元, 可以是话费,也可以是买书,现金(支付宝/微信....), 你喜欢就行

要求: 在QQ群内输入 #maven, 返回maven相关的帖子列表. 为了区分普通内容, 建议使用前缀#号.

论坛搜索接口调用示例:

http://nutz.cn/yvr/search?q=maven&format=json

{"suggestions":[{"id":"pehhup80bki2soefl2j0l1j8vu","title":"maven erro","type":"shortit","content":null,"contentId":"05el8dvu3egt4qctk1ntcctnkt","tags":["maven"],"userId":7,"top":false,"good":false,"lock":false,"lastComment":null,"replies":null,"author":null,"createTime":"2015-11-11 11:44:34","updateTime":"2015-11-11 11:44:34"}, {"id":"vuq71au57igi2qk8j7u10luphc","title":"err maven","type":"shortit","content":null,"contentId":"qp0rf4br4ohjkqlcp11h6p3fgj","tags":null,"userId":7,"top":false,"good":false,"lock":false,"lastComment":null,"replies":null,"author":null,"createTime":"2015-11-11 11:42:21","updateTime":"2015-11-11 11:42:21"}, {"id":"qa4f4j58fugvnqrgqlh86ndr13","title":"maven构建的项目启动是看不到nutz的日志了。","type":"ask","content":null,"contentId":"vhblsl5fhoj53qi5vcrvb5fkgg","tags":["maven"],"userId":48,"top":false,"good":false,"lock":false,"lastComment":null,"replies":null,"author":null,"createTime":"2015-10-10 00:05:45","updateTime":"2015-10-10 00:05:45"}, {"id":"rf9u0tpipkge0rkgc2veokd5vd","title":"google后没搞定,idea和maven相关","type":"ask","content":null,"contentId":"p7e36bpb9ih8apil522agr50tk","tags":null,"userId":149,"top":false,"good":false,"lock":false,"lastComment":null,"replies":null,"author":null,"createTime":"2015-11-25 11:50:17","updateTime":"2015-11-25 11:50:17"}, {"id":"vshc2bg89cg96p7ts6d13urq61","title":"maven项目添加servlet-2.5依赖,启动报错","type":"ask","content":null,"contentId":"ogastdf11ihgtq7vaurnipujvl","tags":null,"userId":62,"top":false,"good":false,"lock":false,"lastComment":null,"replies":null,"author":null,"createTime":"2015-10-18 10:55:44","updateTime":"2015-10-18 10:55:44"}]}

调用频率限制: 无
所需权限: 无

33 回复

@wendal
我追加100

@At("/event")
	@Ok("void")
	public void test(@Param("..") NutMap data, HttpServletResponse response) throws IOException {
		if (Strings.equals(data.getString("Event"), "ClusterIM") && data.getInt("GroupId") == 68428921 && Strings.startsWithChar(data.getString("Message"), '#')) {// 是群消息而且群号正确
																																									// 然后是指令
			String key = data.getString("Message").substring(1);
			Response resp = Http.get("http://nutz.cn/yvr/search?q=" + key + "&format=json");
			final StringBuilder msgbBuilder = new StringBuilder("机器人自动检索结果:\r\n");
			if (resp.isOK()) {
				NutMap suggestions = Lang.map(resp.getContent());
				Lang.each(suggestions.getList("suggestions", NutMap.class), new Each<NutMap>() {

					@Override
					public void invoke(int arg0, NutMap suggestion, int arg2) throws ExitLoop, ContinueLoop, LoopException {
						if (Strings.equals(suggestion.getString("type"), "ask")) {
							msgbBuilder.append(suggestion.getString("title") + " : http://nutz.cn/yvr/t/" + suggestion.getString("contentId") + "\r\n");
						}
					}
				});
			}
			response.getWriter().write(msgbBuilder.toString());
		}
	}

悬赏什么的就算了,大家捐赠点儿买个机器人授权得了

@kerbores 多少钱来着?268?

@wendal 此功能赞助费用100已经通过红包转账给兽总

恩,已收到

科技100,汉哥100,wendal 100

这个怎么弄 ,也想玩。求指教

@面 贡献了80,够了

@wendal 我想学 qq robot, 求指教

@qq_5a31be25 看本站的源码,该功能在今天早上已经commit

@wendal 能给个链接吗 ? 吧啦,触电,大白,超能陆战队,

@qq_5a31be25 页面底部

@wendal 必须使用jdk1.8吗?

@wendal 是我的太低了,改为1.6就好了 1_png

@qq_5a31be25 用了少量jdk8的语法

http://www.d5dqqrobot.com/ 这一款, 已买授权,不是免费使用的. 想着免费用的可以路过了

可以在这个基础上写一个啊
https://github.com/ScienJus/smartqq

别人已经写好了一个
https://github.com/b3log/xiaov

@kerbores 服务器接受不到群消息呢?

INFO  - 消息信息:{
   "RobotQQ" :"322****39067",
   "Event" :"Get"
}

机器人配置用的web接口插件 设置了地址和收到群消息和收到qq消息

@sunhai1988 这是smartqq的吧?

@wendal 是的 d5dqqrobot.com 是不是需要买授权了 ,才能收到完整消息!

@sunhai1988 有点乱,到底用的哪个?

d5dqqrobot.com 只能试用一天,全功能的.

@wendal 我用的d5dqqrobot.com untitled1_png

统统选上

来自炫酷的 NutzCN

接口里面收到的消息是:

INFO  - 消息信息:{
   "RobotQQ" :"322****39067",
   "Event" :"Get"
}

接受code

 @At("/msg")
    @Ok("raw")
    @Fail("void")
    @Filters
    public String msg(@Param("..") NutMap data, HttpServletRequest req)
            throws IOException {
         //String groupId = data.getString("GroupId");
        log.info("消息信息:"+Json.toJson(data));
        return "";
    }

@sunhai1988 话说,机器人加入相关的群了?设为管理员了?

来自炫酷的 NutzCN

再说了,来来去去只发了event get,其他一条消息都没有?

来自炫酷的 NutzCN

event只有Get 我是试用版。。

@sunhai1988 是不是启用了其他插件,导致没有到达这个插件。

event get仅相当于心跳。

来自炫酷的 NutzCN

我的接受robot消息是放在nutzwk3.1里面的 ,这个框架里面是不是不能直接绑定到 NutzMap 上。。

nutz-book-project 的接收RobotModule extends BaseModule

nutzwk3.1中

package cn.wizzer.modules.qqrobot;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Fail;
import org.nutz.mvc.annotation.Filters;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;

/**
 * Created by wizzer on 2016/7/3.
 */
@IocBean
@At("/qqrobot")
public class QQRobotController  {
    private static final Log log = Logs.get();
    @Inject
    protected PropertiesProxy conf;
    /**
     * 命令开始符号
     */
    public static final char cmd = '#';
    /**
     * AT模板
     */
    public static final String AT_TPL = "@%s(%s)";

    public QQRobotController() {
       
    }

    // TODO 加上KEY认证
    @At("/msg")
    @Ok("raw")
    @Fail("void")
    @Filters
    public String msg(@Param("..") NutMap data, HttpServletRequest req)
            throws IOException {
         //String groupId = data.getString("GroupId");
    	
        log.info("消息信息:"+Json.toJson(data));
        return "";
    }
 
}

如果觉得是框架问题, 何不直接从req中取一下看看.

问题是, 从未收到过event get之外的信息,所以还是机器人的配置问题

@wendal 更新下 web接口插件就好了(4.1.0.6) 就好了。。哈哈哈

添加回复
请先登陆
回到顶部