Basic, easily extendable, Telegram bot class
Project description
A very minimal class that implements a Telegram bot trigger-response loop plus some endpoint utilities. Can (should) be extended depending on needs.
Why yet another Python Telegram bot framework?
method chaining to generate requests, easier on IDEs code completion and more readable than long 10-params functions
fully async request handling for high responsiveness
doesn’t depend on any other framework to handle the networking side
simple to understand, easy to maintain
caches media files ids with barely any effort (and if you backup the cache in a db you can make it persistent)
Quickstart
import asyncio
import json
import uvicorn
from ubot import Bot, Trigger
from ubot.endpoints import SendMessage
loop = asyncio.get_event_loop()
bot = Bot('token', loop=loop)
# add a simple trigger
@bot.trigger
class CustomTrigger(Trigger):
async def match(self, update, bot):
return True
async def trigger(self, update, bot)
req = SendMessage(YOUR_USER_ID, 'test').serialize()
bot.api_request(req)
# prepare the ASGI class to push updates into the bot
class App:
def __init__(self, scope):
assert scope['type'] == 'http'
self.scope = scope
async def __call__(self, receive, send):
if self.scope['path'] == WEBHOOK_PATH and self.scope['method'] == 'POST':
body = []
more_body = True
while more_body:
message = await receive()
body.append(message.get('body', b'').decode('utf-8'))
more_body = message.get('more_body', False)
body = ''.join(body)
body = json.loads(body)
bot.push_update(body)
await send({
'type': 'http.response.start',
'status': 204, # noqa: S001
'headers': [
[b'content-type', b'text/plain'],
]
})
await send({
'type': 'http.response.body'
})
# remoe the loop and http parameters if you're not using PyPy
server = uvicorn.Server(uvicorn.Config(
app=App, host='0.0.0.0', port=8080, loop='asyncio', http='h11'))
# start the server and the bot
loop.run_until_complete(asyncio.gather[
bot.start(),
server.serve(),
loop=loop
])
Resources
TODO: documentation, unit tests, support sticker, passport, payments, games
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.