Add v2 support for independent GusVoice connections to one AWG server

This commit is contained in:
wenil committed 2026-10-30 15:38:31 +03:00
1 parent 38c6a1a682
commit 0e62fe20ed
9 files changed
+759 -148

No files matched your search

+11
View File
@@ -21,6 +21,7 @@ from gusvoice_bot import Client, GusVoiceApiError
from . import __version__
from .bot import Bot
from .core import Awg, Delivery, State, client_for
from .profiles import assert_unique_bot
DEFAULT_CONFIG = "/etc/awg-gus-bot.json"
DEFAULT_STATE = "/var/lib/awg-gus-bot"
@@ -47,6 +48,9 @@ def validate_config(d):
for key in ("awg2", "state_dir"):
if not Path(d[key]).is_absolute():
raise ValueError(f"{key}: нужен абсолютный путь")
if "label" in d and (not isinstance(d["label"], str) or len(d["label"]) > 80
or any(ord(c) < 32 for c in d["label"])):
raise ValueError("Название подключения должно быть одной строкой до 80 символов")
return d
@@ -122,6 +126,8 @@ def configure(args):
if client.get_webhook_info().get("url"):
raise ValueError("У этого бота настроен webhook. Создайте отдельного бота для AWG.")
resolved = validate_url(client.api_url())
candidate = {"url": resolved, "token": token, "bot_id": me["id"]}
assert_unique_bot(args.config, candidate, getattr(args, "layout", None))
code = secrets.token_urlsafe(18)
print(f"\nОткройте личную беседу с @{me.get('username', '')} в Гусе.")
print("Отправьте следующее сообщение (код действует 10 минут):\n")
@@ -130,6 +136,8 @@ def configure(args):
owner, chat, offset = pair(client, code)
d = {"url": resolved, "token": token, "owners": [owner], "bot_id": me["id"],
"awg2": args.awg2, "state_dir": args.state_dir}
if getattr(args, "label", None):
d["label"] = args.label
validate_config(d)
state = State(Path(args.state_dir) / "state.sqlite3", resolved + "|" + me["id"])
state.set("offset", offset)
@@ -186,6 +194,9 @@ async def run(args):
def main():
if len(sys.argv) > 1 and sys.argv[1] == "manage":
from .manage import main as manage_main
return manage_main(sys.argv[2:])
parser = argparse.ArgumentParser(description="AWG Toolza bot for GusVoice")
parser.add_argument("command", choices=["run", "setup", "check"])
parser.add_argument("--config", default=DEFAULT_CONFIG)