A Lightweight BOT Framework
Project description
FastBot
A lightweight bot framework base on FastAPI and OneBot v11 protocol.
Quick Start
Installation
Install from Github
pip install --no-cache --upgrade git+https://github.com/OrganRemoved/fastbot.git
or
pip install --no-cache --upgrade https://github.com/OrganRemoved/fastbot/archive/refs/heads/main.zip
Install from PYPI
pip install --no-cache --upgrade fastbot-onebot
Example
The directory structure is as follows:
bot_example
| __init__.py
| bot.py
|
\---plugins
__init__.py
plugin_example.py
bot.py
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from fastapi import FastAPI
from fastbot.bot import FastBot
from fastbot.plugin import PluginManager
@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
# Register a websocket adapter to `FastAPI`
app.add_api_websocket_route("/onebot/v11/ws", FastBot.ws_adapter)
await asyncio.gather(
*(
init() if asyncio.iscoroutinefunction(init) else asyncio.to_thread(init)
for plugin in PluginManager.plugins.values()
if (init := plugin.init)
),
)
yield
if __name__ == "__main__":
(
FastBot
# `plugins` parameter will pass to `fastbot.plugin.PluginManager.import_from(...)`
# the rest parameter will pass to `FastAPI(...)`
.build(plugins=["plugins"], lifespan=lifespan)
# Parameter will pass to `uvicorn.run(...)`
.run(host="0.0.0.0", port=80)
)
plugin_example.py
from fastbot.event import Context
from fastbot.event.message import GroupMessageEvent, PrivateMessageEvent
from fastbot.matcher import Matcher
from fastbot.plugin import PluginManager, middleware, on
# Passing rules to the matcher
IsNotGroupAdmin = Matcher(rule=lambda event: event.sender.role != "admin")
# Refactoring the Matcher
class IsInGroupBlacklist(Matcher):
def __init__(self, *blacklist):
self.blacklist = blacklist
def __call__(self, event: GroupMessageEvent) -> bool:
return event.group_id in self.blacklist
async def init() -> None:
# Do some initial work here
...
# All middlewares will be executed in sequence
@middleware(priority=0)
async def preprocessing(ctx: Context):
if (group_id := ctx.get("group_id")) == ...:
# Temporarily disable the plugin
PluginManager.plugins["plugins.plugin_example"].state.set(False)
elif group_id is None:
# When the `Context` is clear, the middleware will discard
# the event and terminate processing
ctx.clear()
# Combining multiple rules via `&(and)`, `|(or)`,`~(not)`
@on(matcher=IsNotGroupAdmin & ~IsInGroupBlacklist(...))
# For the best performance, you can use `callable function`
# E.g. `lambda event: event.get("group_id") in (...)`
async def func(
# The event type to be handled must be specified via type hints
# You can use `|` or `typing.Union` types
event: GroupMessageEvent | PrivateMessageEvent,
) -> None:
if event.text == "guess":
await event.send("Start guessing the number game now: [0-10]!")
while new_event := await event.defer("Enter a number: "):
if new_event.text != "10":
await new_event.send("Guess wrong!")
continue
await new_event.send("Guess right!")
return
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
fastbot_onebot-2024.12.10.tar.gz
(10.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastbot_onebot-2024.12.10.tar.gz.
File metadata
- Download URL: fastbot_onebot-2024.12.10.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebead91bb8657ef97919f539f538a1cbb0516cf70bd0536635308c8d982313b6
|
|
| MD5 |
af0aa30cc2268562c018d0cbd7abbe3b
|
|
| BLAKE2b-256 |
cbdbaefe3d2b6e1b4f22be435aab05960b4751572bf472cad8de052bff265eab
|
File details
Details for the file fastbot_onebot-2024.12.10-py3-none-any.whl.
File metadata
- Download URL: fastbot_onebot-2024.12.10-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d40456e050de3b3aaf2b7e90e0d05d742684d0bf17c4e1a7c2d4c91c604a3e9f
|
|
| MD5 |
1eec873b9ff5fa54bc68ed348b2cc7f5
|
|
| BLAKE2b-256 |
78e51750984256c1af21fa13b434ba53d91e81775be8129cfe8f5df00239fb7f
|