Add standalone GusVoice AWG bot and Linux installer

This commit is contained in:
wenil committed 2026-10-30 14:44:04 +03:00
commit 38c6a1a682
23 files changed
+2924

No files matched your search

+502
View File
@@ -0,0 +1,502 @@
# Generated by `node scripts/gen-bot-api.mjs` from docs/bot-api/openapi.json — DO NOT EDIT.
# CI (`gen-bot-api.mjs --check`) fails when this file is out of date.
# SPDX-License-Identifier: MIT
"""Types and method wrappers of the GusVoice Bot API, generated from the OpenAPI document."""
from __future__ import annotations
from typing import Any, Dict, List, Literal, Optional, Sequence, TypedDict, Union
SCHEMA_VERSION = "1.4.0"
"""Version of the OpenAPI document this module was generated from."""
API_VERSION = 4
"""Bot API level (`getMe.api_version`) the wrappers below know about."""
METHODS: Dict[str, int] = {
"getMe": 1,
"getUpdates": 1,
"setWebhook": 1,
"deleteWebhook": 1,
"getWebhookInfo": 1,
"sendMessage": 1,
"editMessageText": 1,
"deleteMessage": 1,
"sendChatAction": 1,
"getChat": 1,
"editMessageReplyMarkup": 2,
"answerCallbackQuery": 2,
"setMyCommands": 2,
"getMyCommands": 2,
"deleteMyCommands": 2,
"setMessageReaction": 3,
"pinChatMessage": 3,
"unpinChatMessage": 3,
"getChatHistory": 3,
"getChatMember": 3,
"getChatMemberCount": 3,
"getChatMembers": 3,
"getMyServers": 3,
"getServer": 3,
"addChatMemberRole": 3,
"removeChatMemberRole": 3,
"banChatMember": 3,
"unbanChatMember": 3,
"kickChatMember": 3,
"leaveChat": 3,
"joinVoice": 4,
"leaveVoice": 4,
"getVoiceChatMembers": 4,
}
"""Every Bot API method → the API level it appeared in (`getMe.api_version`)."""
UPDATE_TYPES = (
"message",
"edited_message",
"message_deleted",
"my_chat_member",
"callback_query",
"message_reaction",
"chat_member",
"voice_state",
)
"""Update kinds (one key besides `update_id` in every `Update`); unknown kinds may appear — ignore them."""
# required: url, file_name, mime_type, file_size
Attachment = TypedDict("Attachment", {
"url": "str",
"file_name": "str",
"mime_type": "str",
"file_size": "float",
}, total=False)
# required: command, description
BotCommand = TypedDict("BotCommand", {
"command": "str",
"description": "str",
}, total=False)
# Supported `type`: default, all_private_chats, all_group_chats; other types are rejected with 400.
# required: type
BotCommandScope = TypedDict("BotCommandScope", {
"type": "str",
}, total=False)
# required: id, username, display_name, bot, description, about, public
BotUser = TypedDict("BotUser", {
"id": "str",
"username": "str",
"display_name": "str",
"bot": "bool",
"instance_domain": "str",
"description": "str",
"about": "str",
"public": "bool",
"api_version": "float",
"features": "List[str]",
"dropped_update_count": "float",
}, total=False)
# required: id, from, message, data, date
CallbackQuery = TypedDict("CallbackQuery", {
"id": "str",
"from": "User",
"message": "Message",
"data": "str",
"date": "float",
}, total=False)
# required: id, type
Chat = TypedDict("Chat", {
"id": "str",
"type": "Literal[\"dm\", \"channel\", \"server\", \"voice\"]",
"server_id": "str",
"title": "str",
}, total=False)
# required: id, type
ChatFullInfo = TypedDict("ChatFullInfo", {
"id": "str",
"type": "Literal[\"dm\", \"channel\", \"server\", \"voice\"]",
"server_id": "str",
"title": "str",
"user": "User",
"member_count": "float",
}, total=False)
# required: user, status, role_ids
ChatMember = TypedDict("ChatMember", {
"user": "User",
"status": "Literal[\"creator\", \"member\", \"left\", \"kicked\"]",
"nickname": "str",
"role_ids": "List[str]",
"joined_date": "float",
}, total=False)
# required: chat, from, date, old_status, new_status
ChatMemberUpdated = TypedDict("ChatMemberUpdated", {
"chat": "Chat",
"from": "User",
"date": "float",
"old_status": "Literal[\"creator\", \"member\", \"left\", \"kicked\"]",
"new_status": "Literal[\"creator\", \"member\", \"left\", \"kicked\"]",
}, total=False)
# required: members
ChatMembersPage = TypedDict("ChatMembersPage", {
"members": "List[ChatMember]",
"next_offset": "str",
}, total=False)
# required: ok, error_code, description
Error = TypedDict("Error", {
"ok": "bool",
"error_code": "float",
"description": "str",
"retry_after": "float",
}, total=False)
# Exactly one of `callback_data` (1–64 BYTES of UTF-8, not characters) and `url` (http(s) only, no credentials in the address).
# required: text
InlineKeyboardButton = TypedDict("InlineKeyboardButton", {
"text": "str",
"callback_data": "str",
"url": "str",
}, total=False)
# At least one row, 1–8 buttons in a row, at most 100 buttons in total.
# required: inline_keyboard
InlineKeyboardMarkup = TypedDict("InlineKeyboardMarkup", {
"inline_keyboard": "List[List[InlineKeyboardButton]]",
}, total=False)
# required: —
InputEmbed = TypedDict("InputEmbed", {
"title": "Optional[str]",
"description": "Optional[str]",
"url": "Optional[str]",
"color": "Optional[int]",
"timestamp": "Optional[str]",
"fields": "Optional[List[Dict[str, Any]]]",
"author": "Optional[Dict[str, Any]]",
"footer": "Optional[Dict[str, Any]]",
"image": "Optional[Dict[str, Any]]",
"thumbnail": "Optional[Dict[str, Any]]",
}, total=False)
# required: message_id, chat, from, date, text
Message = TypedDict("Message", {
"message_id": "str",
"chat": "Chat",
"from": "User",
"date": "float",
"edit_date": "float",
"text": "str",
"reply_to_message_id": "str",
"attachments": "List[Attachment]",
"embeds": "List[MessageEmbed]",
"reply_markup": "InlineKeyboardMarkup",
}, total=False)
# required: message_id, chat, date
MessageDeleted = TypedDict("MessageDeleted", {
"message_id": "str",
"chat": "Chat",
"date": "float",
}, total=False)
# required: —
MessageEmbed = TypedDict("MessageEmbed", {
"title": "str",
"url": "str",
"description": "str",
"color": "float",
"timestamp": "str",
"author": "Dict[str, Any]",
"footer": "Dict[str, Any]",
"fields": "List[Dict[str, Any]]",
"image": "Dict[str, Any]",
"thumbnail": "Dict[str, Any]",
"imageLink": "str",
"thumbnailLink": "str",
}, total=False)
# required: chat, message_id, user, date, old_reaction, new_reaction
MessageReactionUpdated = TypedDict("MessageReactionUpdated", {
"chat": "Chat",
"message_id": "str",
"user": "User",
"date": "float",
"old_reaction": "List[ReactionType]",
"new_reaction": "List[ReactionType]",
}, total=False)
# required: type, emoji
ReactionType = TypedDict("ReactionType", {
"type": "Literal[\"emoji\"]",
"emoji": "str",
}, total=False)
# required: id, title
ServerBrief = TypedDict("ServerBrief", {
"id": "str",
"title": "str",
}, total=False)
# required: id, title, channels, roles
ServerInfo = TypedDict("ServerInfo", {
"id": "str",
"title": "str",
"channels": "List[Dict[str, Any]]",
"roles": "List[Dict[str, Any]]",
}, total=False)
# required: chat, from, user, date, old_status, new_status
ServerMemberUpdated = TypedDict("ServerMemberUpdated", {
"chat": "Chat",
"from": "User",
"user": "User",
"date": "float",
"old_status": "Literal[\"creator\", \"member\", \"left\", \"kicked\"]",
"new_status": "Literal[\"creator\", \"member\", \"left\", \"kicked\"]",
}, total=False)
# required: update_id
Update = TypedDict("Update", {
"update_id": "float",
"message": "Message",
"edited_message": "Message",
"message_deleted": "MessageDeleted",
"my_chat_member": "ChatMemberUpdated",
"callback_query": "CallbackQuery",
"message_reaction": "MessageReactionUpdated",
"chat_member": "ServerMemberUpdated",
"voice_state": "VoiceStateUpdated",
}, total=False)
# required: id, username, display_name, bot
User = TypedDict("User", {
"id": "str",
"username": "str",
"display_name": "str",
"bot": "bool",
"instance_domain": "str",
}, total=False)
# required: user, muted, deafened, server_muted, is_bot
VoiceChatMember = TypedDict("VoiceChatMember", {
"user": "User",
"muted": "bool",
"deafened": "bool",
"server_muted": "bool",
"is_bot": "bool",
}, total=False)
# required: url, token, room, chat, server_muted, expires_in, audio
VoiceJoinResult = TypedDict("VoiceJoinResult", {
"url": "str",
"token": "str",
"room": "str",
"chat": "Chat",
"server_muted": "bool",
"expires_in": "float",
"audio": "Dict[str, Any]",
}, total=False)
# required: chat, user, action, date
VoiceStateUpdated = TypedDict("VoiceStateUpdated", {
"chat": "Chat",
"user": "User",
"action": "Literal[\"joined\", \"left\"]",
"date": "float",
"move_to": "Chat",
}, total=False)
# required: url, pending_update_count, failures
WebhookInfo = TypedDict("WebhookInfo", {
"url": "str",
"pending_update_count": "float",
"failures": "float",
"last_error_date": "float",
"last_error_message": "str",
"disabled_date": "float",
"batch": "bool",
"dropped_update_count": "float",
}, total=False)
def _params(params: Dict[str, Any], extra: Dict[str, Any]) -> Dict[str, Any]:
out = {k: v for k, v in params.items() if v is not None}
out.update(extra)
return out
class GeneratedMethods:
"""One wrapper per Bot API method; `None` arguments are not sent. `**extra` passes parameters newer than this SDK."""
def call(self, method: str, params: Optional[Dict[str, Any]] = None, *, files: Optional[Sequence[Any]] = None) -> Any:
raise NotImplementedError
def get_me(self, **extra: Any) -> BotUser:
"""`getMe` (API 1+)."""
params: Dict[str, Any] = {}
return self.call("getMe", _params(params, extra))
def get_updates(self, *, offset: Optional[int] = None, limit: Optional[int] = None, timeout: Optional[int] = None, allowed_updates: Optional[List[str]] = None, **extra: Any) -> List[Update]:
"""`getUpdates` (API 1+). Long polling: the request is held up to `timeout` seconds (at most 50)."""
params: Dict[str, Any] = {"offset": offset, "limit": limit, "timeout": timeout, "allowed_updates": allowed_updates}
return self.call("getUpdates", _params(params, extra))
def set_webhook(self, url: str, secret_token: str, *, drop_pending_updates: Optional[bool] = None, batch: Optional[bool] = None, **extra: Any) -> bool:
"""`setWebhook` (API 1+)."""
params: Dict[str, Any] = {"url": url, "secret_token": secret_token, "drop_pending_updates": drop_pending_updates, "batch": batch}
return self.call("setWebhook", _params(params, extra))
def delete_webhook(self, *, drop_pending_updates: Optional[bool] = None, **extra: Any) -> bool:
"""`deleteWebhook` (API 1+)."""
params: Dict[str, Any] = {"drop_pending_updates": drop_pending_updates}
return self.call("deleteWebhook", _params(params, extra))
def get_webhook_info(self, **extra: Any) -> WebhookInfo:
"""`getWebhookInfo` (API 1+)."""
params: Dict[str, Any] = {}
return self.call("getWebhookInfo", _params(params, extra))
def send_message(self, chat_id: str, text: Optional[str] = None, *, reply_to_message_id: Optional[str] = None, embeds: Optional[List[InputEmbed]] = None, disable_notification: Optional[bool] = None, disable_link_preview: Optional[bool] = None, reply_markup: Optional[InlineKeyboardMarkup] = None, client_id: Optional[str] = None, parse_mode: Optional[str] = None, files: Optional[Sequence[Any]] = None, **extra: Any) -> Message:
"""`sendMessage` (API 1+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "text": text, "reply_to_message_id": reply_to_message_id, "embeds": embeds, "disable_notification": disable_notification, "disable_link_preview": disable_link_preview, "reply_markup": reply_markup, "client_id": client_id, "parse_mode": parse_mode}
return self.call("sendMessage", _params(params, extra), files=files)
def edit_message_text(self, chat_id: str, message_id: str, text: str, *, reply_markup: Optional[InlineKeyboardMarkup] = None, parse_mode: Optional[str] = None, **extra: Any) -> Message:
"""`editMessageText` (API 1+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id, "text": text, "reply_markup": reply_markup, "parse_mode": parse_mode}
return self.call("editMessageText", _params(params, extra))
def delete_message(self, chat_id: str, message_id: str, **extra: Any) -> bool:
"""`deleteMessage` (API 1+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id}
return self.call("deleteMessage", _params(params, extra))
def send_chat_action(self, chat_id: str, action: Literal["typing"], **extra: Any) -> bool:
"""`sendChatAction` (API 1+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "action": action}
return self.call("sendChatAction", _params(params, extra))
def get_chat(self, chat_id: str, **extra: Any) -> ChatFullInfo:
"""`getChat` (API 1+)."""
params: Dict[str, Any] = {"chat_id": chat_id}
return self.call("getChat", _params(params, extra))
def edit_message_reply_markup(self, chat_id: str, message_id: str, *, reply_markup: Optional[InlineKeyboardMarkup] = None, **extra: Any) -> Message:
"""`editMessageReplyMarkup` (API 2+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id, "reply_markup": reply_markup}
return self.call("editMessageReplyMarkup", _params(params, extra))
def answer_callback_query(self, callback_query_id: str, text: Optional[str] = None, *, show_alert: Optional[bool] = None, **extra: Any) -> bool:
"""`answerCallbackQuery` (API 2+)."""
params: Dict[str, Any] = {"callback_query_id": callback_query_id, "text": text, "show_alert": show_alert}
return self.call("answerCallbackQuery", _params(params, extra))
def set_my_commands(self, commands: List[BotCommand], *, scope: Optional[BotCommandScope] = None, **extra: Any) -> bool:
"""`setMyCommands` (API 2+)."""
params: Dict[str, Any] = {"commands": commands, "scope": scope}
return self.call("setMyCommands", _params(params, extra))
def get_my_commands(self, *, scope: Optional[BotCommandScope] = None, **extra: Any) -> List[BotCommand]:
"""`getMyCommands` (API 2+)."""
params: Dict[str, Any] = {"scope": scope}
return self.call("getMyCommands", _params(params, extra))
def delete_my_commands(self, *, scope: Optional[BotCommandScope] = None, **extra: Any) -> bool:
"""`deleteMyCommands` (API 2+)."""
params: Dict[str, Any] = {"scope": scope}
return self.call("deleteMyCommands", _params(params, extra))
def set_message_reaction(self, chat_id: str, message_id: str, *, reaction: Optional[List[ReactionType]] = None, **extra: Any) -> bool:
"""`setMessageReaction` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id, "reaction": reaction}
return self.call("setMessageReaction", _params(params, extra))
def pin_chat_message(self, chat_id: str, message_id: str, *, disable_notification: Optional[bool] = None, **extra: Any) -> bool:
"""`pinChatMessage` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id, "disable_notification": disable_notification}
return self.call("pinChatMessage", _params(params, extra))
def unpin_chat_message(self, chat_id: str, message_id: str, **extra: Any) -> bool:
"""`unpinChatMessage` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "message_id": message_id}
return self.call("unpinChatMessage", _params(params, extra))
def get_chat_history(self, chat_id: str, *, before_message_id: Optional[str] = None, limit: Optional[int] = None, **extra: Any) -> List[Message]:
"""`getChatHistory` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "before_message_id": before_message_id, "limit": limit}
return self.call("getChatHistory", _params(params, extra))
def get_chat_member(self, chat_id: str, user_id: str, **extra: Any) -> ChatMember:
"""`getChatMember` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id}
return self.call("getChatMember", _params(params, extra))
def get_chat_member_count(self, chat_id: str, **extra: Any) -> int:
"""`getChatMemberCount` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id}
return self.call("getChatMemberCount", _params(params, extra))
def get_chat_members(self, chat_id: str, *, offset: Optional[str] = None, limit: Optional[int] = None, **extra: Any) -> ChatMembersPage:
"""`getChatMembers` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "offset": offset, "limit": limit}
return self.call("getChatMembers", _params(params, extra))
def get_my_servers(self, **extra: Any) -> List[ServerBrief]:
"""`getMyServers` (API 3+)."""
params: Dict[str, Any] = {}
return self.call("getMyServers", _params(params, extra))
def get_server(self, server_id: str, **extra: Any) -> ServerInfo:
"""`getServer` (API 3+)."""
params: Dict[str, Any] = {"server_id": server_id}
return self.call("getServer", _params(params, extra))
def add_chat_member_role(self, chat_id: str, user_id: str, role_id: str, **extra: Any) -> bool:
"""`addChatMemberRole` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id, "role_id": role_id}
return self.call("addChatMemberRole", _params(params, extra))
def remove_chat_member_role(self, chat_id: str, user_id: str, role_id: str, **extra: Any) -> bool:
"""`removeChatMemberRole` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id, "role_id": role_id}
return self.call("removeChatMemberRole", _params(params, extra))
def ban_chat_member(self, chat_id: str, user_id: str, *, reason: Optional[str] = None, **extra: Any) -> bool:
"""`banChatMember` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id, "reason": reason}
return self.call("banChatMember", _params(params, extra))
def unban_chat_member(self, chat_id: str, user_id: str, **extra: Any) -> bool:
"""`unbanChatMember` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id}
return self.call("unbanChatMember", _params(params, extra))
def kick_chat_member(self, chat_id: str, user_id: str, **extra: Any) -> bool:
"""`kickChatMember` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "user_id": user_id}
return self.call("kickChatMember", _params(params, extra))
def leave_chat(self, chat_id: str, **extra: Any) -> bool:
"""`leaveChat` (API 3+)."""
params: Dict[str, Any] = {"chat_id": chat_id}
return self.call("leaveChat", _params(params, extra))
def join_voice(self, chat_id: str, *, bitrate: Optional[int] = None, **extra: Any) -> VoiceJoinResult:
"""`joinVoice` (API 4+)."""
params: Dict[str, Any] = {"chat_id": chat_id, "bitrate": bitrate}
return self.call("joinVoice", _params(params, extra))
def leave_voice(self, *, chat_id: Optional[str] = None, **extra: Any) -> bool:
"""`leaveVoice` (API 4+)."""
params: Dict[str, Any] = {"chat_id": chat_id}
return self.call("leaveVoice", _params(params, extra))
def get_voice_chat_members(self, chat_id: str, **extra: Any) -> List[VoiceChatMember]:
"""`getVoiceChatMembers` (API 4+)."""
params: Dict[str, Any] = {"chat_id": chat_id}
return self.call("getVoiceChatMembers", _params(params, extra))