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.
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.
Source Distribution
ubot-5.0.0.tar.gz
(12.9 kB
view hashes)
Built Distribution
ubot-5.0.0-py3-none-any.whl
(23.6 kB
view hashes)