Skip to content

Latest commit

 

History

History
163 lines (142 loc) · 6.92 KB

开发指南之WebApi篇.md

File metadata and controls

163 lines (142 loc) · 6.92 KB

开发指南之WebApi篇

##概述

本文将对2个方面进行开发讲解和接口调用分别对短链接WebApi长连接WebSocket进行简要解说 开发必备技能 基本的HTTP原理 以及HTPP 的GET和POST请求

##安装WebAPi测试插件 ·下载仓库中的 WebAPi.json接口文档和Restlet Client - REST API Testing.crx插件导入到Chrome浏览器中 ·插件布局如下:

·每个接口都有详细的参数说明 不要上来就问有没有xxx功能,能不能怎样xxx,你想如何如何...请您搭建好食用后在提问补充。多发issus提问提Bug

例子🌰:以如何通过WebApi给好友发送消息为例

请求方式HTTP POST POST地址 http://127.0.0.1:8888/v1/LuaApiCaller?qq=123456789&funcname=SendMsg&timeout=10 POST数据 {"toUser":1700487478,"sendToType":1,"sendMsgType":"TextMsg","content":"你好","groupid":0,"atUser":0,"replayInfo":null}

其中POST地址 qq=为所操作的QQ号理解为框架登录的QQ机器人也可以 funcname=参数为LuaAPi函数名所有APi可在WebPlugins目录下Api_LuaCaller.lua查看 以及WebApi插件接口列表中查看

新手⚠️不建议⚠️编辑Api_LuaCaller.lua此文件 此文件包含了WebApi 所有的约定 改错就全废 当然你可以通过此文件查看插件中LuaApi 的调用方式以及参数说明 🈲️文件名不可更改 文件内容已实现自动热重载

POST数据为JSON类型 --组建参数 table toUser --欲发给的对象 群或QQ好友或私聊对象 整数型 sendToType --发送消息对象的类型 1好友 2群3私聊 整数型 sendMsgType -- 欲发送消息的类型 "TextMsg","JsonMsg","XmlMsg","ReplayMsg" ,"TeXiaoTextMsg","PicMsg","VoiceMsg","PhoneMsg" 文本型 groupid -- 发送私聊消息是 在此传入群ID 其他情况为0 整数型 content -- 发送的文本内容 atUser -- At用户 �传入用户的QQ号 其他情况为0 整数类型 (不支持多人@) replayInfo --回复类型数据结构 这样就完成了 通过WebApi 给好友/群/私聊发送消息 更详细的字段介绍请看WebApi插件列表Api_LuaCaller.lua

##通过WebSocket 实现时时消息和相关事件接收

这里来说说如何通过长连接WebSocket来对接 说WebSocket不如说SocketIO、SocketIO 是对Websocket的进一步实现 实现了事件的监听以及Ack应答等机制 仓库中以给出c#和js的相关源码

对接成功后你就可以实现自己的框架咯使用自己熟悉的语言开发 插件等 完全脱离Lua(除非不想跨平台) 通过长连接收消息收事件 通过短链接WebApi调用功能 简直是饕餮盛宴 一个字 香! emm...

c# 直接下载仓库中的源码到本地运行 ⚠️这个库也是我现改的 - -测试基本没什么问题

		 static void Main(string[] args)
		   {
				socket = new Client("http://127.0.0.1:8888/");//连接框架中的服务地址
				socket.Opened += SocketOpened;//绑定打开事件
				socket.Message += SocketMessage;//绑定消息事件
				socket.SocketConnectionClosed += SocketConnectionClosed;//绑定连接断开事件
				socket.Error += SocketError;

				socket.Connect();
				string QQ = "123456789";//框架在线的QQ号
				// register for 'connect' event with io server
				socket.On("connect", (fn) =>
				{
					Console.WriteLine(((ConnectMessage)fn).ConnectMsg);
					//重连成功 取得 在线QQ的websocket 链接connid
					//Ack
					socket.Emit("GetWebConn", QQ, null, (callback) =>
					{
						var jsonMsg = callback as string;
						Console.WriteLine(string.Format("callback [root].[messageAck]: {0} \r\n", jsonMsg));
					}
					 );
					//获取已登录QQ的群列表
					//socket.Emit("GetGroupList", QQ);

					//获取已登录QQ的好友列表
					//socket.Emit("GetQQUserList", QQ);
					//获取已登录QQ的群123456789成员列表
					// 
					//string JSON = "{" + string.Format("\"Uid\":\"{0}\",\"Group\":{1}", QQ, 123456789) + "}";
					//socket.Emit("GetGroupUserList", JSON.Replace("\"", "\\\""));//json 需要处理一下转义

					//获取登录二维码
					socket.Emit("GetQrcode", "", null, (callback) =>
					{
						var jsonMsg = callback as string;
						Console.WriteLine(string.Format("GetQrcode From Websocket: {0} \r\n", jsonMsg));
					}
					   );

				});

				//二维码检测事件
				socket.On("OnCheckLoginQrcode", (fn) =>
				{
					Console.WriteLine("OnCheckLoginQrcode\n" + ((JSONMessage)fn).MessageText);
				});
				//收到群消息的回调事件
				socket.On("OnGroupMsgs", (fn) =>
				  {
					  Console.WriteLine("OnGroupMsgs\n" + ((JSONMessage)fn).MessageText);
				  });
				//收到好友消息的回调事件
				socket.On("OnFriendMsgs", (fn) =>
				{
					Console.WriteLine("OnFriendMsgs\n" + ((JSONMessage)fn).MessageText);
				});
				//获取群成员的回调事件
				socket.On("OnGroupUserList", (fn) =>
				{
					Console.WriteLine("OnGroupUserList\n" + ((JSONMessage)fn).MessageText);
				});
				//获取群列表的回调事件
				socket.On("OnGroupList", (fn) =>
				{
					Console.WriteLine("OnGroupList\n" + ((JSONMessage)fn).MessageText);
				});
				//获取好友列表的回调事件
				socket.On("OnQQUserList", (fn) =>
				{
					Console.WriteLine("OnQQUserList\n" + ((JSONMessage)fn).MessageText);
				});
				//统一事件管理如好友进群事件 好友请求事件 退群等事件集合
				socket.On("OnEvents", (fn) =>
				{
					Console.WriteLine("OnEnevts\n" + ((JSONMessage)fn).MessageText);
				});

				// make the socket.io connection
				Console.ReadLine();
				}
			static void SocketOpened(object sender, EventArgs e)
			{
				Console.WriteLine("SocketOpened\r\n");
			}
			static void SocketError(object sender, ErrorEventArgs e)
			{
				Console.WriteLine("socket client error:");
				Console.WriteLine(e.Message);
			}
			static void SocketConnectionClosed(object sender, EventArgs e)
			{
				Console.WriteLine("WebSocketConnection was terminated!");
			}
			static void SocketMessage(object sender, MessageEventArgs e)
			{
				// uncomment to show any non-registered messages
				if (string.IsNullOrEmpty(e.Message.Event))
					Console.WriteLine("Generic SocketMessage: {0}", e.Message.MessageText);
				else
					Console.WriteLine("Generic SocketMessage: {0} : {1}", e.Message.Event, e.Message.Json.ToJsonString());
			}
			//释放连接等操作
			public static void Close()
			{
				if (socket != null)
				{
					socket.Opened -= SocketOpened;
					socket.Message -= SocketMessage;
					socket.SocketConnectionClosed -= SocketConnectionClosed;
					socket.Error -= SocketError;
					socket.Dispose(); // close & dispose of socket client
				}
        }

JS的代码我就不贴出来了emm 看仓库 食用

欢迎贡献你的Code