Add v2 support for independent GusVoice connections to one AWG server
This commit is contained in:
1 parent
38c6a1a682
commit
0e62fe20ed
9 files changed
+759
-148
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user