Skip to content
This repository was archived by the owner on Aug 2, 2020. It is now read-only.

Commit 512eebc

Browse files
committed
Add return code field to API result
1 parent fa22de3 commit 512eebc

File tree

3 files changed

+39
-72
lines changed

3 files changed

+39
-72
lines changed

src/request.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,10 @@ void cqhttp_main_handler(struct evhttp_request* req, void* _)
118118

119119
// write response
120120
struct evbuffer* buf = evbuffer_new();
121-
json_t* json = json_pack("{s:s,s:o?}", "status", cqhttp_status_strings[result.status], "data", result.data);
121+
json_t* json = json_pack("{s:s,s:i,s:o?}",
122+
"status", result.retcode == CQHTTP_RETCODE_OK ? "ok" : "failed",
123+
"retcode", result.retcode,
124+
"data", result.data);
122125
char* json_str = json_dumps(json, JSON_COMPACT);
123126
json_decref(json);
124127
evbuffer_add_printf(buf, "%s", json_str);
@@ -212,7 +215,7 @@ struct cqhttp_result dispatch_request(const struct cqhttp_request& request)
212215
// the corresponding handler does not exist
213216
LOG_D("HTTP请求", string("没有找到 handler:") + path_without_slash);
214217
struct cqhttp_result result;
215-
result.status = CQHTTP_STATUS_FAILED;
218+
result.retcode = CQHTTP_RETCODE_NO_SUCH_API;
216219
return result;
217220
}
218221
}

src/request.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,19 @@ struct cqhttp_request
2222
*/
2323
void cqhttp_main_handler(struct evhttp_request* req, void* _);
2424

25-
enum cqhttp_status
25+
enum cqhttp_retcode
2626
{
27-
CQHTTP_STATUS_OK = 0,
28-
CQHTTP_STATUS_FAILED
27+
CQHTTP_RETCODE_OK = 0,
28+
CQHTTP_RETCODE_ERROR_DEFAULT = 100,
29+
CQHTTP_RETCODE_NO_SUCH_API = 101
2930
};
3031

31-
static const char* cqhttp_status_strings[] = {"ok", "failed"};
32-
3332
struct cqhttp_result
3433
{
35-
cqhttp_result() : status(CQHTTP_STATUS_OK), data(NULL)
34+
cqhttp_result() : retcode(CQHTTP_RETCODE_ERROR_DEFAULT), data(NULL)
3635
{
3736
};
38-
enum cqhttp_status status;
37+
int retcode; // succeeded: 0, lack of parameters or invalid ones: 1, CQ error code: -11, -23, etc... (< 0)
3938
json_t* data;
4039
};
4140

src/request_handlers.cpp

Lines changed: 28 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ CQHTTP_REQUEST_HANDLER(get_login_info)
1818
struct cqhttp_result result;
1919
int64_t id = CQ_getLoginQQ(ac);
2020
const char* nickname = CQ_getLoginNick(ac);
21+
result.retcode = nickname ? CQHTTP_RETCODE_OK : CQHTTP_RETCODE_ERROR_DEFAULT;
2122
result.data = json_pack("{s:I,s:s?}", "user_id", id, "nickname", gbk_to_utf8(nickname).c_str());
2223
return result;
2324
}
@@ -36,10 +37,8 @@ CQHTTP_REQUEST_HANDLER(send_private_msg)
3637
final_str = message_escape(msg);
3738
else
3839
final_str = enhance_cq_code(msg);
39-
CQ_sendPrivateMsg(ac, user_id, utf8_to_gbk(final_str.c_str()).c_str());
40+
result.retcode = CQ_sendPrivateMsg(ac, user_id, utf8_to_gbk(final_str.c_str()).c_str());
4041
}
41-
else
42-
result.status = CQHTTP_STATUS_FAILED;
4342
if (msg)
4443
free(msg);
4544
return result;
@@ -59,10 +58,10 @@ CQHTTP_REQUEST_HANDLER(send_group_msg)
5958
final_str = message_escape(msg);
6059
else
6160
final_str = enhance_cq_code(msg);
62-
CQ_sendGroupMsg(ac, group_id, utf8_to_gbk(final_str.c_str()).c_str());
61+
result.retcode = CQ_sendGroupMsg(ac, group_id, utf8_to_gbk(final_str.c_str()).c_str());
6362
}
64-
else
65-
result.status = CQHTTP_STATUS_FAILED;
63+
// else
64+
// result.status = CQHTTP_STATUS_FAILED;
6665
if (msg)
6766
free(msg);
6867
return result;
@@ -82,10 +81,8 @@ CQHTTP_REQUEST_HANDLER(send_discuss_msg)
8281
final_str = message_escape(msg);
8382
else
8483
final_str = enhance_cq_code(msg);
85-
CQ_sendDiscussMsg(ac, discuss_id, utf8_to_gbk(final_str.c_str()).c_str());
84+
result.retcode = CQ_sendDiscussMsg(ac, discuss_id, utf8_to_gbk(final_str.c_str()).c_str());
8685
}
87-
else
88-
result.status = CQHTTP_STATUS_FAILED;
8986
if (msg)
9087
free(msg);
9188
return result;
@@ -97,9 +94,7 @@ CQHTTP_REQUEST_HANDLER(send_like) // CoolQ Pro only
9794
struct cqhttp_result result;
9895
int64_t user_id = cqhttp_get_integer_param(request, "user_id", 0);
9996
if (user_id)
100-
CQ_sendLike(ac, user_id);
101-
else
102-
result.status = CQHTTP_STATUS_FAILED;
97+
result.retcode = CQ_sendLike(ac, user_id);
10398
return result;
10499
}
105100

@@ -111,9 +106,7 @@ CQHTTP_REQUEST_HANDLER(set_group_kick)
111106
int64_t user_id = cqhttp_get_integer_param(request, "user_id", 0);
112107
bool reject_add_request = cqhttp_get_bool_param(request, "reject_add_request", false);
113108
if (group_id && user_id)
114-
CQ_setGroupKick(ac, group_id, user_id, reject_add_request);
115-
else
116-
result.status = CQHTTP_STATUS_FAILED;
109+
result.retcode = CQ_setGroupKick(ac, group_id, user_id, reject_add_request);
117110
return result;
118111
}
119112

@@ -125,9 +118,7 @@ CQHTTP_REQUEST_HANDLER(set_group_ban)
125118
int64_t user_id = cqhttp_get_integer_param(request, "user_id", 0);
126119
int64_t duration = cqhttp_get_integer_param(request, "duration", 30 * 60 /* 30 minutes */);
127120
if (group_id && user_id && duration >= 0)
128-
CQ_setGroupBan(ac, group_id, user_id, duration);
129-
else
130-
result.status = CQHTTP_STATUS_FAILED;
121+
result.retcode = CQ_setGroupBan(ac, group_id, user_id, duration);
131122
return result;
132123
}
133124

@@ -139,9 +130,7 @@ CQHTTP_REQUEST_HANDLER(set_group_anonymous_ban)
139130
char* anonymous_flag = cqhttp_get_param(request, "flag");
140131
int64_t duration = cqhttp_get_integer_param(request, "duration", 30 * 60 /* 30 minutes */);
141132
if (group_id && anonymous_flag && duration >= 0)
142-
CQ_setGroupAnonymousBan(ac, group_id, utf8_to_gbk(anonymous_flag).c_str(), duration);
143-
else
144-
result.status = CQHTTP_STATUS_FAILED;
133+
result.retcode = CQ_setGroupAnonymousBan(ac, group_id, utf8_to_gbk(anonymous_flag).c_str(), duration);
145134
if (anonymous_flag)
146135
free(anonymous_flag);
147136
return result;
@@ -154,9 +143,7 @@ CQHTTP_REQUEST_HANDLER(set_group_whole_ban)
154143
int64_t group_id = cqhttp_get_integer_param(request, "group_id", 0);
155144
bool enable = cqhttp_get_bool_param(request, "enable", true);
156145
if (group_id)
157-
CQ_setGroupWholeBan(ac, group_id, enable);
158-
else
159-
result.status = CQHTTP_STATUS_FAILED;
146+
result.retcode = CQ_setGroupWholeBan(ac, group_id, enable);
160147
return result;
161148
}
162149

@@ -168,9 +155,7 @@ CQHTTP_REQUEST_HANDLER(set_group_admin)
168155
int64_t user_id = cqhttp_get_integer_param(request, "user_id", 0);
169156
bool enable = cqhttp_get_bool_param(request, "enable", true);
170157
if (group_id && user_id)
171-
CQ_setGroupAdmin(ac, group_id, user_id, enable);
172-
else
173-
result.status = CQHTTP_STATUS_FAILED;
158+
result.retcode = CQ_setGroupAdmin(ac, group_id, user_id, enable);
174159
return result;
175160
}
176161

@@ -181,9 +166,7 @@ CQHTTP_REQUEST_HANDLER(set_group_anonymous) // CoolQ Pro only
181166
int64_t group_id = cqhttp_get_integer_param(request, "group_id", 0);
182167
bool enable = cqhttp_get_bool_param(request, "enable", true);
183168
if (group_id)
184-
CQ_setGroupAnonymous(ac, group_id, enable);
185-
else
186-
result.status = CQHTTP_STATUS_FAILED;
169+
result.retcode = CQ_setGroupAnonymous(ac, group_id, enable);
187170
return result;
188171
}
189172

@@ -195,9 +178,7 @@ CQHTTP_REQUEST_HANDLER(set_group_card)
195178
int64_t user_id = cqhttp_get_integer_param(request, "user_id", 0);
196179
char* card = cqhttp_get_param(request, "card");
197180
if (group_id && user_id)
198-
CQ_setGroupCard(ac, group_id, user_id, card ? utf8_to_gbk(card).c_str() : NULL);
199-
else
200-
result.status = CQHTTP_STATUS_FAILED;
181+
result.retcode = CQ_setGroupCard(ac, group_id, user_id, card ? utf8_to_gbk(card).c_str() : NULL);
201182
if (card)
202183
free(card);
203184
return result;
@@ -210,9 +191,7 @@ CQHTTP_REQUEST_HANDLER(set_group_leave)
210191
int64_t group_id = cqhttp_get_integer_param(request, "group_id", 0);
211192
bool is_dismiss = cqhttp_get_bool_param(request, "is_dismiss", false);
212193
if (group_id)
213-
CQ_setGroupLeave(ac, group_id, is_dismiss);
214-
else
215-
result.status = CQHTTP_STATUS_FAILED;
194+
result.retcode = CQ_setGroupLeave(ac, group_id, is_dismiss);
216195
return result;
217196
}
218197

@@ -225,9 +204,7 @@ CQHTTP_REQUEST_HANDLER(set_group_special_title)
225204
char* special_title = cqhttp_get_param(request, "special_title");
226205
int64_t duration = cqhttp_get_integer_param(request, "duration", -1 /* permanent */); // seems to be no effect
227206
if (group_id && user_id)
228-
CQ_setGroupSpecialTitle(ac, group_id, user_id, special_title ? utf8_to_gbk(special_title).c_str() : NULL, duration);
229-
else
230-
result.status = CQHTTP_STATUS_FAILED;
207+
result.retcode = CQ_setGroupSpecialTitle(ac, group_id, user_id, special_title ? utf8_to_gbk(special_title).c_str() : NULL, duration);
231208
if (special_title)
232209
free(special_title);
233210
return result;
@@ -239,9 +216,7 @@ CQHTTP_REQUEST_HANDLER(set_discuss_leave)
239216
struct cqhttp_result result;
240217
int64_t discuss_id = cqhttp_get_integer_param(request, "discuss_id", 0);
241218
if (discuss_id)
242-
CQ_setDiscussLeave(ac, discuss_id);
243-
else
244-
result.status = CQHTTP_STATUS_FAILED;
219+
result.retcode = CQ_setDiscussLeave(ac, discuss_id);
245220
return result;
246221
}
247222

@@ -253,12 +228,10 @@ CQHTTP_REQUEST_HANDLER(set_friend_add_request)
253228
bool approve = cqhttp_get_bool_param(request, "approve", true);
254229
char* remark = cqhttp_get_param(request, "remark");
255230
if (flag)
256-
CQ_setFriendAddRequest(ac,
257-
utf8_to_gbk(flag).c_str(),
258-
approve ? REQUEST_ALLOW : REQUEST_DENY,
259-
remark ? utf8_to_gbk(remark).c_str() : NULL);
260-
else
261-
result.status = CQHTTP_STATUS_FAILED;
231+
result.retcode = CQ_setFriendAddRequest(ac,
232+
utf8_to_gbk(flag).c_str(),
233+
approve ? REQUEST_ALLOW : REQUEST_DENY,
234+
remark ? utf8_to_gbk(remark).c_str() : NULL);
262235
if (flag)
263236
free(flag);
264237
if (remark)
@@ -280,13 +253,11 @@ CQHTTP_REQUEST_HANDLER(set_group_add_request)
280253
else if (strcmp(type, "invite") == 0)
281254
request_type = REQUEST_GROUPINVITE;
282255
if (flag && type && request_type != -1)
283-
CQ_setGroupAddRequestV2(ac,
284-
utf8_to_gbk(flag).c_str(),
285-
request_type,
286-
approve ? REQUEST_ALLOW : REQUEST_DENY,
287-
remark ? utf8_to_gbk(remark).c_str() : NULL);
288-
else
289-
result.status = CQHTTP_STATUS_FAILED;
256+
result.retcode = CQ_setGroupAddRequestV2(ac,
257+
utf8_to_gbk(flag).c_str(),
258+
request_type,
259+
approve ? REQUEST_ALLOW : REQUEST_DENY,
260+
remark ? utf8_to_gbk(remark).c_str() : NULL);
290261
if (flag)
291262
free(flag);
292263
if (type)
@@ -395,12 +366,9 @@ CQHTTP_REQUEST_HANDLER(get_group_member_info)
395366
INTEGER(member_info.title_expire_time);
396367
INTEGER(member_info.card_changeable);
397368
result.data = member_info.json();
369+
result.retcode = CQHTTP_RETCODE_OK;
398370
}
399-
else
400-
result.status = CQHTTP_STATUS_FAILED;
401371
}
402-
else
403-
result.status = CQHTTP_STATUS_FAILED;
404372
return result;
405373
}
406374

@@ -440,12 +408,9 @@ CQHTTP_REQUEST_HANDLER(get_stranger_info)
440408
INTEGER(stranger_info.sex);
441409
INTEGER(stranger_info.age);
442410
result.data = stranger_info.json();
411+
result.retcode = CQHTTP_RETCODE_OK;
443412
}
444-
else
445-
result.status = CQHTTP_STATUS_FAILED;
446413
}
447-
else
448-
result.status = CQHTTP_STATUS_FAILED;
449414
return result;
450415
}
451416

0 commit comments

Comments
 (0)