最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[極簡(jiǎn)教程]nonebot入門插件編寫

2023-03-10 23:00 作者:西住美穗OfficiaI  | 我要投稿

這是一個(gè)極簡(jiǎn)教程,如有不正確請(qǐng)?jiān)谠u(píng)論區(qū)中指出,歡迎大佬指教

參考文檔聲明:


MRSlouzk/Nonebot-plugintutorials: Nonebot2的插件編寫教程,有些地方可能講的不好,歡迎大佬們指教! (github.com)??https://github.com/MRSlouzk/Nonebot-plugintutorials

nonebot/nonebot2: 跨平臺(tái) Python 異步聊天機(jī)器人框架 / 用 Python 編寫的異步多平臺(tái)聊天機(jī)器人框架 (github.com)? ? https://github.com/nonebot/nonebot2

Well404 - 知乎 (zhihu.com)? ??https://www.zhihu.com/people/well404

基于 Python asyncio 編寫

1.關(guān)鍵詞應(yīng)答,示例代碼

from nonebot import?on_keyword

from nonebot.adapters.onebot.v11 import Message


word=on_keyword({"x"})


@word.handle()

async def _():

await word.finish(Message("y"))


這段示例代碼是當(dāng)bot接收到"x"時(shí),返回"y"

紅色的是響應(yīng)器的函數(shù)可替換為:

  1. on: 創(chuàng)建任何類型的事件響應(yīng)器。

  2. on_metaevent: 創(chuàng)建元事件響應(yīng)器。

  3. on_message: 創(chuàng)建消息事件響應(yīng)器。

  4. on_request: 創(chuàng)建請(qǐng)求事件響應(yīng)器。

  5. on_notice: 創(chuàng)建通知事件響應(yīng)器。

  6. on_startswith: 創(chuàng)建消息開頭匹配事件響應(yīng)器。

  7. on_endswith: 創(chuàng)建消息結(jié)尾匹配事件響應(yīng)器。

  8. on_fullmatch: 創(chuàng)建消息完全匹配事件響應(yīng)器。

  9. on_keyword: 創(chuàng)建消息關(guān)鍵詞匹配事件響應(yīng)器。

  10. on_command: 創(chuàng)建命令消息事件響應(yīng)器。

  11. on_shell_command: 創(chuàng)建 ? ? shell 命令消息事件響應(yīng)器。

  12. on_regex: 創(chuàng)建正則表達(dá)式匹配事件響應(yīng)器。

  13. CommandGroup: 創(chuàng)建具有共同命令名稱前綴的命令組。

  14. MatcherGroup: 創(chuàng)建具有共同參數(shù)的響應(yīng)器組。

響應(yīng)器用于接收關(guān)鍵詞如on_message是接收所有消息,on_command 接收的消息是需要帶”/”的

藍(lán)色的在寫代碼時(shí)可自定義,但每個(gè)都要相同如:

a=on_keyword({"x"})

@a.handle()

async def _():

await a.finish(Message("y"))


rule的用法

from nonebot import on_keyword
from nonebot.rule import to_me

word=on_keyword({"x"},rule=to_me())

rule是判斷信息類型如

rule=to_me 是檢測(cè)信息是否at bot

checker

from nonebot import on_keyword
from nonebot.adapters.onebot.v11 import Event

def _checker(event: Event) -> bool :
? ?return event.message_type=="group"

word=on_keyword({"你是誰(shuí)"},rule=_checker)

事件響應(yīng)器的匹配規(guī)則是一個(gè)?Rule?對(duì)象,它是一系列?checker?的集合,當(dāng)所有的?checker?都返回?True?時(shí),才會(huì)觸發(fā)該響應(yīng)器。

優(yōu)先級(jí) priority

事件響應(yīng)器的優(yōu)先級(jí)代表事件響應(yīng)器的執(zhí)行順序

同一優(yōu)先級(jí)的事件響應(yīng)器會(huì)同時(shí)執(zhí)行,優(yōu)先級(jí)數(shù)字越小越先響應(yīng)!優(yōu)先級(jí)請(qǐng)從 1 開始排序!

word=on_keyword({"你是誰(shuí)"},priority=5)

阻斷 block

當(dāng)有任意事件響應(yīng)器發(fā)出了阻止事件傳遞信號(hào)時(shí),該事件將不再會(huì)傳遞給下一優(yōu)先級(jí),直接結(jié)束處理。

NoneBot 內(nèi)置的事件響應(yīng)器中,所有非 command 規(guī)則的 message 類型的事件響應(yīng)器都會(huì)阻斷事件傳遞,其他則不會(huì)。

在部分情況中,可以使用 matcher.stop_propagation() 方法動(dòng)態(tài)阻止事件傳播,該方法需要 handler 在參數(shù)中獲取 matcher 實(shí)例后調(diào)用方法。

foo = on_request()
@foo.handle()async def handle(matcher: Matcher): ? ?matcher.stop_propagation()


有效期 temp/expire_time

temp 屬性:配置事件響應(yīng)器在下一次響應(yīng)之后移除。

expire_time 屬性:配置事件響應(yīng)器在指定時(shí)間之后移除。

阻斷 block

當(dāng)有任意事件響應(yīng)器發(fā)出了阻止事件傳遞信號(hào)時(shí),該事件將不再會(huì)傳遞給下一優(yōu)先級(jí),直接結(jié)束處理。

NoneBot 內(nèi)置的事件響應(yīng)器中,所有非 command 規(guī)則的 message 類型的事件響應(yīng)器都會(huì)阻斷事件傳遞,其他則不會(huì)。

在部分情況中,可以使用 matcher.stop_propagation() 方法動(dòng)態(tài)阻止事件傳播,該方法需要 handler 在參數(shù)中獲取 matcher 實(shí)例后調(diào)用方法。

foo = on_request()
@foo.handle()async def handle(matcher: Matcher): ? ?matcher.stop_propagation()

CQ碼https://docs.go-cqhttp.org/cqcode/和MessageSegment

CQ 碼是指 CQ 中特殊消息類型的文本格式, 這是它的基本語(yǔ)法:

[CQ:類型,參數(shù)=值,參數(shù)=值]

1

在 QQ 中, 一個(gè)消息由多個(gè)部分構(gòu)成, 例如一段文本, 一個(gè)圖片, at 某人的一個(gè)部分. CQ 中定義了與這些消息相符的 CQ 碼, 以方便用戶使用.

例如, 下面是由一個(gè) at 部分和一個(gè)文本部分構(gòu)成的合法 CQ 消息串

[CQ:at,qq=114514]早上好啊

1

例如qq號(hào)為114514的人昵稱為"小明", 那么上述消息串在QQ中的渲染是這樣的:

@小明 早上好啊

CQ碼有多種功能如:發(fā)送語(yǔ)音,戳一戳等

但容易被風(fēng)控,不建議使用

MessageSegment

MessageSegment的使用方法實(shí)際上非常簡(jiǎn)單,基本的用法就是 MessageSegment.xxx() ,并且正如上文所說,MessageSegment本質(zhì)上是Message類,所以我們不需要用 Message() 對(duì)其進(jìn)行轉(zhuǎn)義。 首先我們先輸入 MessageSegment. 然后查看編輯器的提示或轉(zhuǎn)到源碼,就能看到MessageSegment提供的方法了:

img

我們這里用image進(jìn)行舉例:

from nonebot.adapters.onebot.v11 import MessageSegment
setu001 = MessageSegment.image('file:///D:/learning_materials/setu/001.jpg')

這樣setu001就是一個(gè)Message類的澀圖了,理論上和 Message('[CQ:image,file=file:///D:/learning_materials/setu/001.jpg]') 是等效的。

MessageSegment由于功能很多,因此不在此一一演示了,想要用好MessageSegment,需要需要多加利用編輯器的自動(dòng)補(bǔ)全和語(yǔ)法提示,這樣就不必翻源碼即可使用了。

Call _api?https://docs.go-cqhttp.org/api/

使用方法

首先我們需要知道我們對(duì)接的客戶端有什么樣的api,這樣我們才能對(duì)其發(fā)起請(qǐng)求。我們使用的gocqhttp的官方文檔中對(duì)API有詳細(xì)的介紹。

call_api的寫法目前有兩種,bot.call_api('xxx', **{key:value})bot.xxx(key=value)兩種僅寫法不同,實(shí)質(zhì)并無(wú)影響,可根據(jù)自身喜好進(jìn)行調(diào)整。

這里我們以“獲取群信息”為例進(jìn)行寫法一的演示。

我們需要提供兩個(gè)數(shù)據(jù),其中no_cache為選填字段(是否為選填字段需要自行結(jié)合描述和實(shí)踐進(jìn)行判斷),group_id為必填字段。

from nonebot.adapters.onebot.v11 import Bot
from nonebot import on_message

test = on_command('test')
@test.handle()
async def _(bot: Bot):
? ?# call_api的寫法一
? ?data = await bot.call_api('get_group_info',**{
? ? ? ?'group_id' : 123456
? ?})

這樣我們就獲得了data這個(gè)json格式的返回值,然后進(jìn)行簡(jiǎn)單的轉(zhuǎn)義就可以讀取了。 這里我們?cè)傺菔疽幌潞汀鞍l(fā)送消息”,并使用第二種方法進(jìn)行演示。

from nonebot.adapters.onebot.v11 import Bot, Event
from nonebot import on_message
import ast

test = on_command('test')
@test.handle()
async def _(bot: Bot, event: Event):
? ?# call_api的寫法一
? ?data = await bot.call_api('get_group_info',**{
? ? ? ?'group_id' : 123456
? ?})
? ?# 對(duì)json進(jìn)行轉(zhuǎn)義
? ?data = ast.literal_eval(str(data))
? ?msg = f"群號(hào) ?:{data['group_id']}\
? ? ? ? ?\n群名稱:{data['group_name']}\
? ? ? ? ?\n成員數(shù):{data['member_count']}"
? ?# call_api的寫法二
? ?await bot.send(
? ? ? ?event ? = event,
? ? ? ?message = msg
? ?)
? ?# 不過,這里更推薦直接用響應(yīng)器的send方法
? ?# await test.send(msg)


[極簡(jiǎn)教程]nonebot入門插件編寫的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
普陀区| 肃南| 克山县| 沅江市| 晋城| 阳泉市| 北票市| 怀柔区| 通榆县| 论坛| 庆阳市| 石渠县| 会宁县| 屯门区| 娄烦县| 萍乡市| 龙川县| 舟山市| 博罗县| 永福县| 黄平县| 从化市| 宜君县| 鹤峰县| 景谷| 伊川县| 贺兰县| 白玉县| 会昌县| 北票市| 油尖旺区| 循化| 富民县| 海安县| 黄龙县| 尚义县| 苏尼特右旗| 清河县| 高邮市| 博白县| 平塘县|