关于Pagermaid脚本开发的一些个人经验
- 说明
之前我脑子转不过来,写脚本的时候是在服务器里面写,导致每次测试的时候都需要重启一下pm,现在我对pm有一些些了解,所以现在我在用vscode在写以及测试(之前真的太傻了)。其实主要也是我不知道在电脑上运行与在服务器里面运行结果或者函数一不一样。一下就是我的一些我认为的经验,有误希望各位大佬帮忙指出,感谢!!!(我是给排水的,编程只是个人兴趣,第一次写,有很多不规范的地方还请大佬们留情,谢谢!)
Modify与Pyro通用的一些代码
1、@Listener
首先,@Listener的功能是:
- 识别信息的 message ID 是否与填写的 API ID 一致,如果一致则会对发送的信息进行响应。
- 对含有 Command 中指令的特定信息进行响应。
在这一部分,Modify与Pyro代码基本相似,都由三部分组成,以下是例子。
@listener(is_plugin=True, outgoing=True, command=alias_command("T"), #前两个参数我还没搞懂,可以根据字面意思理解
description="中译英", #单纯的向刚使用脚本的人解释该脚本怎么用或者用来干嘛的
parameters="<str>")
- command 指令
假设有两条信息(command 指令为T)
- - T 在吗( , T 在吗) (Modify中用 - 来识别,Pyro用 , 来识别)
- 在吗
则pm会对第一条消息做出响应,因为在第一条消息中包含特定的指令 -T 或者 ,T
- parameter 指令
对于parameters,上面第一条消息中的 在吗 就是parames,可以在 str 中对输入的内容进行规定。例如:
@listener(is_plugin=True, outgoing=True, command=alias_command("T"),
description="中译英",
parameters="<str1> <str2>")
表示在 -T 后面要有两个字符串,并且用空格隔开(在pm中,用空格来区分输入的两个字符串)。在pm中储存的是列表,列表名为parameter,其中parameter[0]=str1,parameter[1]=str2。
2、同样还是关于Listener
如果在vscode上运行Listener,是会提示该运行平台不是Linux,无法运行,需要在Linux系统下才能运行,所以我在vscode测试代码的时候就会先声明 API ID 和 API HASH ,并且注释掉 @Listener 这样就可以在win系统下进行测试脚本,但这样做的缺点就是会把你TG上的所有信息都会拦截下来,进行响应。我的解决办法是添加if条件,判断 message ID 是否是本人的ID,是的话进行操作,不是则略过该消息。
Modify中的一些函数
import asyncio
import requests
from pyrogram import Client
async def str2url(url): #自定义函数1
async def str2sign(url): #自定义函数2
##在vscode版本上
api_id = int
api_hash = "str"
app = Client("my_account", api_id=api_id, api_hash=api_hash)
@app.on_message() #在win上加上这句
async def translate(client,message): #以下为主代码
url['q']=message.text #在win中,由于不能用Linstener,需要用client与message一起传递(我认为)
signurl= await str2sign(url)
urlall= await str2url(signurl)
r=requests.get(urlall)
transinfo = json.loads(r.text)
await message.edit(transinfo['trans_result'][0]['dst'])
app.run() #在win中,有了这句才会运行程序
#以下是在Linux中运行
@listener(is_plugin=True, outgoing=True, command=alias_command("T"),
description="中译英",
parameters="<str>")
async def translate(context): #在Linux上可以使用Listener,只需用context传递(我认为)
url['q']=context.parameter[0]
signurl= await str2sign(url)
urlall= await str2url(signurl)
r=requests.get(urlall)
transinfo = json.loads(r.text)
await context.edit(transinfo['trans_result'][0]['dst'])
1、定义函数,需要有 async 前缀,例如函数1和函数2
2、使用函数时,也需要加上前缀 await
3、上面函数中的 message 和 context 应该都是可以用不同的单词,但我习惯用这两个。
4、如果需要对消息进行编辑用message.edit('str类型') 只能是str类型
以下是我自己收集到的一些函数表达式
context.arguments-------获取包含command指令的消息,例如:'-T 在吗' context.arguments=='-T 在吗'
context.delete()---------删除编辑后的消息
context.id--------(还不知道是什么,但可能就是发送人的账号ID)
context.sender_id-------(还不知道是什么)
context.client.get_me------(还不知道是什么,等用到了再更新)
context.is_channel-------判断是否为频道
context.is_group---------判断是否为群组
context.is_private-------判断是否为私人频道或者群组
context.get_reply_message-----获取回复的消息
context.get_chat()-------获取chat ID
Pyro
还没用到,用到了继续更新