唯一一个什么也不做的电报机器人库
DepyTG的Python项目详细描述
折旧
唯一的python3 telegram bot库不做nothing。
等等,什么?
当然这根本不起作用。然而,与其他许多telegram bot库相比,它什么也做不了,这是一个设计目标。
设计目标
主要目的是亲吻-保持简单,愚蠢。
除了简单,depytg还试图:
- 与Telegram的官方API规范有1:1的对应关系。您需要的唯一文档是电报。
- 与您可能要使用的任何http库兼容-requests、flask、json+urllib、任何内容
- 确保99.9999%的对象是json可序列化的
- 提供一个简单(但完全可选)的api来完成网络任务
- 与支持代码洞察的ide紧密集成,通过类型暗示可以暗示的所有内容
- 不要试图重新发明轮子。telegram的api非常简单,我们不会实现简化的“send_message”方法。
大音符
这是一项正在进行的工作!我白手起家写这个是为了写我自己的电报机器人。我没怎么测试过。我在做的时候会测试的。我很快会写一些测试并添加ci。
快速介绍
创建对象
- 手动
>>>types.Document(file_id='doc_id',file_name='ciao.pdf',thumb=PhotoSize(file_id='thumb_id',width=100,height=50))Document({'file_id':'doc_id','thumb':PhotoSize({'file_id':'thumb_id','width':100,'height':50}),'file_name':'ciao.pdf'})
- 来自dict/json
>>>types.Document.from_json({'file_id':'doc_id','file_name':'ciao.pdf','thumb':{'file_id':'thumb_id','height':50,'width':100}})Document({'file_id':'doc_id','thumb':PhotoSize({'file_id':'thumb_id','width':100,'height':50}),'file_name':'ciao.pdf'})# Notice how the type of "thumb" (PhotoSize) is automatically detected.
调用方法
方法是常规的python对象。”调用“它们一次生成参数字典,然后两次(传递api令牌)实际发送请求。
- 使用内置的API
# ↓ Pass fields here ↓ Pass token here >>>methods.setWebhook("https://my.super.webhook.com")("my_bot_token")True>>>methods.getWebhookInfo()("my_bot_token")WebhookInfo({'url':'https://my.super.webhook.com','has_custom_certificate':False,'pending_update_count':0})
- 使用外部库
# ↓ Store to variable ↓ Only pass fields>>>method=methods.setWebhook("https://my.super.webhook.com")>>>r=requests.post("https://api.telegram.org/botmy_bot_token/setWebhook",json=method)>>>method.read_result(r.json())True>>>r=requests.get("https://api.telegram.org/botmy_bot_token/getWebhookInfo")# ↓ "read_result" is specific for each method>>>methods.getWebhookInfo.read_result(r.json())WebhookInfo({'url':'https://my.super.webhook.com','has_custom_certificate':False,'pending_update_count':0})
注意:
接受InputFile
对象的方法有点特殊。首先,任何接受InputFile
的字段都是可选的,即使telegram的api引用正好相反。
InputFile
是唯一不能序列化json的对象,因此需要特殊处理。如果使用自定义http库,则需要按照telegram文档中的说明自行上载文件。
内置的请求api将自动处理InputFile
对象,并将字段作为multipart/form-data
发送。如果安装了requests-toolbelt
,它将用于传输文件。
可能的问题
为什么要在api中定义每个可能的对象every?
因为我的目标之一就是完成代码。
所有电报api对象和方法都是TelegramObjectBase
的子类,它是dict
的子类。这意味着所有内容(除了InputFile
)都是json可序列化的,可以在此库之外使用。
dict
已经被扩展为检查字段类型并使用标准的点表示法访问它们,这样,pycharm之类的ide就可以在您做错什么时发出警告。
它们被“重写”的原因是为了允许类型检查。