自动翻译本页面为自动翻译,英文原文为最终版本。阅读此页的英文版
Python 客户端 — `disband-bot`
官方Python客户端。只使用标准库(threading + urllib),因此除了客户端本身之外,没有需要安装的东西。适用于Python 3.9+。
安装
pip install disband-bot
或者,从这个单一版本库中:
pip install ./packages/disband-bot-python
快速启动
from disband_bot import Client
client = Client(token=DISBAND_BOT_TOKEN)
@client.on("ready")
def on_ready(me):
print(f"Logged in as {me['name']} ({', '.join(me['scopes'])})")
@client.on("messageCreate")
def on_message(message):
if message.author_is_bot:
return
if message.content == "!ping":
message.reply("pong")
client.run() # connects and blocks forever
处理器可以是普通或async def;两者均受支持。
建造者
`Client(token, base_url="https://www.disband.dev", gateway_timeout=20)`
| 参数 | 默认值 | 描述 |
|---|---|---|
token |
(必填) | 来自设置→机器人的机器人令牌。 |
base_url |
"https://www.disband.dev" |
API根(更改为自定义域名)。 |
gateway_timeout |
20 |
每个网关查询的秒数(1-20)。 |
生命周期
| 方法 | 描述 |
|---|---|
run() |
连接,发送ready,在后台线程中启动网关循环,并永久阻塞。 |
close() |
停止循环。 |
事件
注册client.on("name", handler)——作为装饰器或普通调用——以及once用于单次调用处理器。
| 事件 | 参数 | 备注 |
|---|---|---|
ready |
user |
user["id"], user["name"], user["scopes"], etc. |
messageCreate |
message |
机器人可以看到的服务器中的一条新消息。 |
messageUpdate |
message |
一条消息已被编辑(content,edited_at已更新)。 |
messageDelete |
message |
已删除一条消息(content为空;id/channel_id有效)。 |
error |
error |
网关错误。除非令牌无效,否则循环将自动重试,在这种情况下,它将停止。 |
`Message`
| 字段 | 类型 | 描述 |
|---|---|---|
id |
str |
消息编号。 |
channel_id |
str |
频道ID。 |
server_id |
str | None |
服务器ID。 |
author |
dict | None |
{ "id", "username", "display_name", "avatar_url", "is_bot" }。 |
content |
str |
消息文本。 |
reply_to_id |
str | None |
此回复的消息,如果有的话。 |
mentions |
list |
提及的用户。 |
attachment |
dict | None |
{ "url", "type" } 当消息包含文件时。 |
created_at |
str | None |
ISO时间戳。 |
edited_at |
str | None |
上次编辑的ISO时间戳。 |
display_id |
int | None |
顺序显示号码。 |
author_is_bot |
bool |
当发件人是机器人(属性)时为真。 |
方法——message.reply(content)在同一频道回复。
方法
client.send_message(channel_id, "Deploy finished") # send
message.reply("pong") # reply to a received message
messages = client.list_messages(channel_id, limit=25, before="…")
channels = client.list_channels(server_id)
members = client.list_members(server_id)
channel_id = client.create_channel(server_id, "deploys")
client.rename_channel(channel_id, "deploys-2")
client.delete_channel(channel_id)
client.leave_server(server_id)
invite = client.create_invite(server_id, ["messages.read", "messages.write"])
# invite["invite_url"] -> send to the server owner
错误
客户端使用.status和.body创建DisbandError的子类:
| 错误 | 当 |
|---|---|
AuthError |
401 — 无效或已撤销的令牌。网关循环在此处停止。 |
PermissionError |
403 — 缺少作用域或角色权限。 |
RateLimitError |
429 — 包括retry_after秒。 |
HttpError |
任何其他非2xx状态。 |
从内部来看,客户端是API 参考上的薄外壳:REST.get/post/patch/delete与Authorization: Bot <token>。
Disband