From a4774b272c073e1e0007a162c75cc8e9717874af Mon Sep 17 00:00:00 2001 From: qsc20001102 Date: Thu, 18 Sep 2025 19:30:18 +0800 Subject: [PATCH] 11 --- README.md | 2 +- __pycache__/main.cpython-313.pyc | Bin 0 -> 7112 bytes _conf_schema.json | 8 + core/__init__.py | 0 core/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 163 bytes core/__pycache__/request.cpython-313.pyc | Bin 0 -> 1374 bytes core/jx3jiaoyihang.py | 71 ++++++++ core/request.py | 24 +++ main.py | 197 ++++++++++++++++++++-- metadata.yaml | 10 +- 10 files changed, 293 insertions(+), 19 deletions(-) create mode 100644 __pycache__/main.cpython-313.pyc create mode 100644 _conf_schema.json create mode 100644 core/__init__.py create mode 100644 core/__pycache__/__init__.cpython-313.pyc create mode 100644 core/__pycache__/request.cpython-313.pyc create mode 100644 core/jx3jiaoyihang.py create mode 100644 core/request.py diff --git a/README.md b/README.md index ae9c1f0..cfca54a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# helloworld +# JX3API AstrBot 插件模板 diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f61c240d95c6435a9792909f271fe32f470fec0 GIT binary patch literal 7112 zcmcgxdvqJsnZKi%kz`r26+7`ej_lYZPVj>`58{OsJ0x+G;1&;pv~kfY@>rfAOXkif zar2iGD6t8|PMa4=Am))`(-NCDr3Mm0!YQzSt+b+z&p=NfSYzq08XQj9)BR(=JEM^w zSR8iQvvZE`{q)`6cc0(=9@jHAn+3tQ{=n}$={$r!BR}-dm?UNtAWk6;anvq^wVJ|| z`rCjFP#bp9P6jhh7PC$xHaZA~-eq!{vDuk{Gn^J|QF+X+Os5rFRhk9bhHXF_In%Bz zXEx4upf*FRLmz&&E+_o*+21=tIXW=q8FdDZ20nb{5I9prB z23q57NDAXzA61o=Air9wXxZ2y_$408_C`^{5AdSs@$uUZ@BvBAnft4i7ejst@TRT7 zfW-GmGQ&w8ESoX!6GZ5sijs}~pwFjLHqu#BPy%d+;7gFXLVH#RFL^uN`+Mr$?HCW4iK%NRCdd05f3P#jKmNPe zz-eWCTzvND!ncKj56wb8`k+Xzzq%h4H+8B;*W7jh- zw4UOaBDCMUpTS0sEkfATW^T>VyP2(FM~(WfbEY=SdIM($IVQEQnOp`)ThmHg7D#8# zleUrb`UYv+0_m)I(pg+Kk>>0;+lB6>u)P9REs?Fxp8Cda;RpVZPY5KkU@fxAn>;=v z5O6l$q;{z5BsBS(`4JRbs8eXK$|l7_v^13>3$^Ndud|?@ zmGXfqv{W%ND~7s3@62wu5D+A{TV}|NWVRa%0SVd}k@t6Cau7Hd3OU2=_WC`d=yr>w ze}}`-D{tP`(6&R6+LG$lM%1dUTV1Z$<^dht7nI!EZ=!afY;9d0AyCu(6AV@W$;;+$ zP>ntlJ2Z)9P<+*kJ~i9=O%Zd!+5C^qWfMz_p2+}CU;BX2FZ{t=FasduOh-u5`sDObpa5Tr%7y`75Y6Zx` zuXU~#CL8s86<}OUE1AxMFV)V@(LGkzGmdRIiIB$(8q0Dl5qHs?aTU~yqD?9ql&uu) z&Cmw|NfVLO`-C3MY7e#)!mysIgP!lFHc|nj%eXq(&<=YDE6vt%vo)8Y_qK^SfKIUv z z>I_A6rVQ;>BO0O~CgcH~g$RSzHFO2qLA5;8f$pVOpbiSKDSrmoO>olYy-Rh?Y9*F% z!3Vx>rOTX!>J9qHj&%B5p(FIUtw5Y5U~V+~ELz<`>GM#{U}b0p3>H^?xaQmIHFKg| zc?S&H0bvt%s?T@5G)MAY7&$dk%((7mHmUn(7~!`o+N1RWc8Y%=kmz z$C6EN#?HSUdwEQ`a9(SILEF_P<@H}EFPwo;EYVL!0V#?1bbXmmI(+5HsllhTs7pEX zX6)$OiIdMYIKC{KZPQ}6>nCI9U(hx)g{!j4nO$0h=?32n5rBk+Zm7Ebf+W*$nlcT( zU$#8#@rU?r7zZ&XPDi$O`@w6wVX+W{%CwJ{20Z{<`(aw@`= zk3@6!M6G)!tU1%hB^gfYFD2zecSlO@3>Q}qKR7In_Kft58>6+~3)kHDp6Mgz-_8GK z4nO!vw0Tc>#}C6l+!rqN_Bki4d1rSHwZGc=V&`z^5 zD>sklgp2NpSnv6NX*>|UV`I2-(-;mHHAJip>X_k@>f!d$&XLZs1JRl-;p*>=Lu*sS z+VtI8|Dx~e(2t@ybst;nzPeqDmX^*S%2qz%C?m&l(l$-QuYcZNhwOzj$N(GusWoR{ z_tU$>#p}lI8e17I-1xC|)132Zj^^yVW!)LJ?)>L8OYr|Cxb};CJY6^aQP?NobqCdEo2Kqxp0sSGR(u}2PUc! zi6g)cDCS0}8IVhM2>~#%a^AeVmg4UsVk=2e0mYoKH1XQG_~`TV;!zS*sqttN1i|y; z(K;$X?FBDufWW&E1=USzxl(J19W;Jw*^vC-&*sF~CY zytgGp+-Bn3fO6q&&23JO_bSi7I5~cNa{Org={LY#DOcW|IzJx!>2Dyd(T?O$)i=3w z(G%rlPnSiH@50MpX9pW`Wwh$N8BjH-0@!h1@3`Lbubr1MH!e}H#6Df!Z z$6KMOGR=Aed_UoCBgGC(!0L z=tdC*evbrgszL~=U=Vm?&oSP*y(BIBZ;0K`NMej3iAuVLHf`nK}iUrqJ zdAe6Q`PRH^OVnGvwtt&|SCh)XxPELmbPH#~u{Z`-)MIp6a0R$7NYGSZWlE>6C%k_ z>d8^L&>O#gLeozRu7V~tlQ?9kamcJB=&`$UW=I)2nt17~YM;~)9ef?6BWf@%31H92 zb}AQMo4R;OYtiEPpT7%92LaI#qbB8s5-RtQ!D5+X=}fbhPR`&VrQtDn$VH9boDg_1 zqbE~>%m@Ok?HPXjkHvSLFbz@@_M#zrXk9YYJUE^iz2p9H<+k@)!==p;d-I@$05XOv zMpuul9@{v+CA!8LuG;m{x^QVr#NIN$dBgbH=$h@}svYl1;nLj^`|h7vJ~yF~b<-A< zTcAb9sW|RCSXbhmj#O{0rN$Z?n%1J5Ybc;^uC;8vlfJp3dh06s{c;vK@2_Hk^ZuPQ z(EoSl^$gL@lzFY9FiF?o4H({6iARO^Rg2r*6>Jar32k+|9}ju_$(C%lyFb zAn0~u;(jqP2I?~@E+Z7V=j8dgs|y@8W(dnk3e~`a`9b){1hEX>XC;p$c-@fPVqsrM z;^E0wwk2P0y}aM=cEj|F0IbG+_o-PHCh4kLkY{S~G8A7ug{B#rEgUjUBdErf|ASOt zSSYrKg2c*bJ^JX8M+aM??8<3F9qXjRt2WIbLd?*}SfTO0Xs0N)oq~L99(=hDCqxoX z$S<}mhAt!M$_+D!5J@y4|FK=`91$VBTwg%dQu1Gs$3whGlFa>LFd&=Ye*1-e_41PB zqjU{CMc1g$r|Q0H+ev(oY@dsOoy6K<5PyS-!Im@U0JK<#9F%MYE5_F($JNqid%GZd z_Q83>>q9^Y_(a*l>shlX=j{xLyf=jTR&B12Xdvw%)X-dAk@{?GzDLuXE%`zeUCn)RB$QeP-Kcn>#wEj=1^iQZVhE~HtQRZ8y;6D&Nq2DT88!23S ztFS3j*z_^l`d2EWZ}s4g@N!r9kw>GH`?g`Hfoi7)*Uuo8fUP$CEA_d?RrmM50l@x5 A=>Px# literal 0 HcmV?d00001 diff --git a/_conf_schema.json b/_conf_schema.json new file mode 100644 index 0000000..7fe4d6e --- /dev/null +++ b/_conf_schema.json @@ -0,0 +1,8 @@ +{ + "api_token": { + "description": "JX3API的token", + "type": "string", + "default": "", + "hint": "填写购买的JX3API的token,用于访问的付费接口服务" + } +} \ No newline at end of file diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/__pycache__/__init__.cpython-313.pyc b/core/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0086240d9d22636c4e0d1b58122d526b79d50c3 GIT binary patch literal 163 zcmey&%ge<81g%L&GeGoX5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~i8t5uA9W=V`= zaY>O=eo0J9Vo735K~8CUW?pejB2X|Xza$>QkI$+wPAtfbNzN}yjfs!X%*!l^kJl@x hyv1RYo1apelWJGQ3N#XAWig2Hk(rT^v4|PS0svIODe?dS literal 0 HcmV?d00001 diff --git a/core/__pycache__/request.cpython-313.pyc b/core/__pycache__/request.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..506f62b4f2a524067ac6a28202287163c5f90057 GIT binary patch literal 1374 zcma)6UuauZ82`@wlic>EP1bDG+L@-UAa`t?FpD!(C99pd)y(BuC^Q)E(vvKu&CSla zSG$L)?8S9Hq{xO7Wfq3m`BHsS_A<93>_tduq2*X%FjrgHLm>*HFP@X+&TcZc5AOH> z`+eW}&f!*DTAG2=ADN#{-je|C2*V?8*QmOOi;G}_iH-uPOGFU2rK8djnaEKv6;pm1 zCJ<3_$WS*$S;9cfH)-c`m}F25r_TIb==`fH9RDIjVC;S{>2Fr+8ha1G;s+knyu4&>L!MQaJz)AC zf#o-~{>C|4;eg~JMgi@){8#`Oz#KfktrkHn&G8+RQsk0my~zOsIK)R66TnKD7`0uir>shAL(ux31+!9^!;7bpuQ>*Yh9iv>lS*RYs>NTeGo^IOGy z+9i`j>{@iBMP7@E7@r|b#S@PTV)3C^>h-*nic^OivYnJTPO3QR=JExavbghv?WF5= zdSdzj$4zByf>Vt{^c7FD)+}~1Cq*K}{*lM`_b}(F;o|(Sno0FD;y=ATUuiy0WiXN%x zkrjP^Mc-cqiI1SQmICJkv+vJYb7py$v8?S`3x@w$(}OE|S4HpIo>Xo(=DX*^F{X0eKnX)7 zExd+^m(KLYKKu9#Xp0FIopyELU$ne3+TT> N 1: + params["server"] = parts[1] # 第二个参数为服务器 + + if len(parts) > 2: + try: + params["num"] = int(parts[2]) # 第三个参数为日期偏移 + except ValueError: + params["num"] = 0 # 参数为日期偏移 + # 获取数据 + data = fetch_jx3_data(custom_url, **params) + + if not data: + yield event.plain_result("获取获取接口信息失败,请稍后再试") + return + + # 格式化返回消息 + try: + # 构建回复消息 + result_msg = f"{params['server']}-{data.get('date')}-星期{data.get('week')}\n" + result_msg += f"大战:{data.get('war')}\n" + result_msg += f"战场:{data.get('battle')}\n" + result_msg += f"阵营:{data.get('orecar')}\n" + result_msg += f"宗门:{data.get('school')}\n" + result_msg += f"驰援:{data.get('rescue')}\n" + result_msg += f"画像:{data.get('draw')}\n" + result_msg += f"宠物福缘:\n{data.get('luck')}\n" + result_msg += f"家园声望:\n{data.get('card')}\n" + result_msg += f"武林通鉴:\n{data.get('team')}\n" + + yield event.plain_result(result_msg) + + except Exception as e: + logger.error(f"处理数据时出错: {e}") + yield event.plain_result("处理接口返回信息时出错") async def terminate(self): """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" + + + @filter.command("剑三骚话") + async def jx3_shaohua(self, event: AstrMessageEvent): + """随机获取一条与万花门派相关的骚话""" + # 接口URL + custom_url = "https://www.jx3api.com/data/saohua/random" + # 接口参数 + params = { + "name": "万花", # 默认值 + } + + # 获取消息内容 + + # 解析消息内容 + + # 获取数据 + data = fetch_jx3_data(custom_url, **params) + + if not data: + yield event.plain_result("获取获取接口信息失败,请稍后再试") + return + + # 格式化返回消息 + try: + # 构建回复消息 + result_msg = f"{data.get('text')}\n" + + yield event.plain_result(result_msg) + + except Exception as e: + logger.error(f"处理数据时出错: {e}") + yield event.plain_result("处理接口返回信息时出错") + + async def terminate(self): + """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" + + + @filter.command("剑三技改") + async def jx3_jigai(self, event: AstrMessageEvent): + """查询技能的历史修改记录,包括资料片更新、技能调整等信息""" + # 接口URL + custom_url = "https://www.jx3api.com/data/skills/records" + # 接口参数 + params = { + + } + + # 获取消息内容 + + # 解析消息内容 + + # 获取数据 + data = fetch_jx3_data(custom_url,**params) + + if not data: + yield event.plain_result("获取获取接口信息失败,请稍后再试") + return + + # 格式化返回消息 + try: + # 构建回复消息 + result_msg = f"剑网三最近技改\n" + for i, item in enumerate(data[:2], 1): + result_msg += f"{i}. {item.get('title', '无标题')}\n" + result_msg += f"时间:{item.get('time', '未知时间')}\n" + result_msg += f"链接:{item.get('url', '无链接')}\n\n" + + yield event.plain_result(result_msg) + + except Exception as e: + logger.error(f"处理数据时出错: {e}") + yield event.plain_result("处理接口返回信息时出错") + + async def terminate(self): + """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" + + + @filter.command("剑三交易行") + async def jx3_jiaoyihang(self, event: AstrMessageEvent): + """获取剑网3交易行信息""" + + # 接口参数 + params = { + "server": "眉间雪", # 默认服务器 + "name": "守缺" # 默认当天 + } + + + # 获取消息内容 + message_str = event.message_str.strip() + parts = message_str.split() + + # 解析消息内容 + if len(parts) > 1: + params["server"] = parts[1] # 第二个参数为服务器 + + if len(parts) > 2: + params["name"] = parts[2] # 第三个参数为日期偏移 + # 获取数据 + data = fetch_jx3_jiaoyihang(params["server"], params["name"]) + + if not data: + yield event.plain_result("获取接口信息失败,请稍后再试") + return + + # 格式化返回消息 + try: + # 构建回复消息 + result_msg = f"{data}\n" + + yield event.plain_result(result_msg) + + except Exception as e: + logger.error(f"处理数据时出错: {e}") + yield event.plain_result("处理接口返回信息时出错") + + async def terminate(self): + """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" \ No newline at end of file diff --git a/metadata.yaml b/metadata.yaml index c8d3f94..28603d4 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,5 +1,5 @@ -name: helloworld # 这是你的插件的唯一识别名。 -desc: 这是 AstrBot 的默认插件,支持关键词回复。 # 插件简短描述 -version: v1.3 # 插件版本号。格式:v1.1.1 或者 v1.1 -author: Soulter # 作者 -repo: https://github.com/Soulter/helloworld # 插件的仓库地址 +name: jx3api # 这是你的插件的唯一识别名。 +desc: 通过接口调用剑网三API接口获取游戏数据 # 插件简短描述 +version: v1.0.0 # 插件版本号。格式:v1.1.1 或者 v1.1 +author: fxdyz # 作者 +repo: https://github.com/qsc20001102/astrbot_plugin_jx3api # 插件的仓库地址