summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruakci <git@uakci.space>2022-11-07 02:29:51 +0100
committeruakci <git@uakci.space>2022-11-07 02:35:47 +0100
commit79268b48e784b789f98408df2ba8916dd02dbd11 (patch)
tree84d2bf7498aaa97ee6947d6b2454515c3b74bb31
parentadd overflow protection on send (diff)
downloadnuogai-79268b48e784b789f98408df2ba8916dd02dbd11.tar.gz
nuogai-79268b48e784b789f98408df2ba8916dd02dbd11.zip
replace spe and nui with zugai’s lil serial tool
-rw-r--r--bot.go40
-rw-r--r--flake.lock54
-rw-r--r--flake.nix61
-rw-r--r--module.nix57
4 files changed, 85 insertions, 127 deletions
diff --git a/bot.go b/bot.go
index 1d8ca2a..170789a 100644
--- a/bot.go
+++ b/bot.go
@@ -28,15 +28,16 @@ const (
wikiHelpUrl = "https://toaq.me/Nuogaı"
wikiPageUrl = "https://toaq.me/%s"
wikiCommandsUrl = "https://toaq.me/Discord/Help_text?action=render"
+ toaduaUrl = "%s/api"
+ zugaiUrl = "%s/zugai?to=%s&text=%s"
lozenge = '▯'
)
var (
- markdownLinkRe = regexp.MustCompile(`!?\[(.*)\]\((.*)\)`)
- alphaHyphenRe = regexp.MustCompile(`^[a-z-]+$`)
- ports struct {
- toa, spe, nui string
- }
+ markdownLinkRe = regexp.MustCompile(`!?\[(.*)\]\((.*)\)`)
+ alphaHyphenRe = regexp.MustCompile(`^[a-z-]+$`)
+ toaduaCmdRe = regexp.MustCompile(`^%([1-9][0-9]*)?$`)
+ toaduaHost, zugaiHost string
)
func mustGetenv(name string) (env string) {
@@ -48,9 +49,8 @@ func mustGetenv(name string) (env string) {
}
func init() {
- ports.spe = mustGetenv("SPE_PORT")
- ports.nui = mustGetenv("NUI_PORT")
- ports.toa = mustGetenv("TOA_PORT")
+ toaduaHost = mustGetenv("TOADUA_HOST")
+ zugaiHost = mustGetenv("ZUGAI_HOST")
}
func min(a, b int) int {
@@ -263,15 +263,13 @@ func respond(message string, callback func(Response)) {
returnText("please supply input")
return
}
- returnFromRequest(get(fmt.Sprintf("http://localhost:%s/query?%s", ports.spe, restQuery)))
- case "%nui":
- if len(rest) == 0 {
- returnText("please supply input")
+ out, err := exec.Command("expand-serial", rest).Output()
+ if err != nil {
+ log.Print(err)
+ returnText("lủı sa tủoı")
return
}
- u, _ := url.Parse(fmt.Sprintf("http://localhost:%s", ports.nui))
- returnFromRequest(post(u.String(), "application/octet-stream",
- bytes.NewBufferString(rest)))
+ returnText(string(out))
case "%help":
returnText(fmt.Sprintf("<%s>", wikiHelpUrl))
case "%)":
@@ -344,9 +342,9 @@ func respond(message string, callback func(Response)) {
}
returnText(parse + math)
case "%english", "%logic", "%structure":
- returnFromRequest(get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", cmd[1:], restQuery)))
+ returnFromRequest(get(fmt.Sprintf(zugaiUrl, zugaiHost, cmd[1:], restQuery)))
case "%tree":
- file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery))
+ file, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, "xbar-png", restQuery))
if err != nil {
log.Println(err)
returnText(fmt.Sprintf("diagram not available: %s", err.Error()))
@@ -358,7 +356,7 @@ func respond(message string, callback func(Response)) {
case "%all":
sb := &strings.Builder{}
for i, name := range []string{"english", "structure", "logic"} {
- res, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", name, restQuery))
+ res, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, name, restQuery))
if err != nil {
log.Println(err)
returnText(err.Error())
@@ -369,7 +367,7 @@ func respond(message string, callback func(Response)) {
}
sb.WriteString(strings.TrimSpace(string(res)))
}
- file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery))
+ file, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, "xbar-png", restQuery))
if err != nil {
log.Println(err)
fmt.Fprintf(sb, "\ndiagram not available: %v", err.Error())
@@ -405,7 +403,7 @@ func Toadua(args []string, returnText func(string), howMany int, showNotes bool)
returnText("error")
return
}
- raw, err := http.Post(fmt.Sprintf(`http://localhost:%s/api`, ports.toa),
+ raw, err := http.Post(fmt.Sprintf(toaduaUrl, toaduaHost),
"application/json", bytes.NewReader(mars))
if err != nil {
log.Print(err)
@@ -589,7 +587,7 @@ func Hoekai(s string) string {
}
func main() {
- dg, err := discordgo.New("Bot " + os.Getenv("TOKEN"))
+ dg, err := discordgo.New("Bot " + os.Getenv("NUOGAI_TOKEN"))
if err != nil {
panic(err)
}
diff --git a/flake.lock b/flake.lock
index 56641fc..5bee353 100644
--- a/flake.lock
+++ b/flake.lock
@@ -66,46 +66,29 @@
"type": "indirect"
}
},
- "nuigui-upstream": {
- "flake": false,
- "locked": {
- "lastModified": 1551541396,
- "narHash": "sha256-PZUzgumsvIpzEgODVpiBKlZzZQHXKhS+3lOB+2EDeeQ=",
- "owner": "uakci",
- "repo": "nuigui",
- "rev": "87d41886f7c4693dfc5e3016799232c7e15e4c81",
- "type": "github"
- },
- "original": {
- "owner": "uakci",
- "ref": "master",
- "repo": "nuigui",
- "type": "github"
- }
- },
"root": {
"inputs": {
"flake-utils": "flake-utils",
"gomod2nix": "gomod2nix",
"nixpkgs": "nixpkgs_2",
- "nuigui-upstream": "nuigui-upstream",
- "serial-predicate-engine-upstream": "serial-predicate-engine-upstream"
+ "toaq-dictionary": "toaq-dictionary",
+ "zugai": "zugai"
}
},
- "serial-predicate-engine-upstream": {
+ "toaq-dictionary": {
"flake": false,
"locked": {
- "lastModified": 1546479877,
- "narHash": "sha256-jVDNyfYWlk5qYsZSQjcGdI4hdEKKdSciz6QK0nAqKGs=",
- "owner": "acotis",
- "repo": "serial-predicate-engine",
- "rev": "9e02baf711c0b7402da2eeb50b8644bf7b6e415f",
+ "lastModified": 1660491489,
+ "narHash": "sha256-H/e9i0Y6ugFQhqKxasJQoSBlSNU8xUOuF5H/vpxnTiQ=",
+ "owner": "toaq",
+ "repo": "dictionary",
+ "rev": "aa22bbb6b5e4b898143b3a66bfee9890a640aca5",
"type": "github"
},
"original": {
- "owner": "acotis",
+ "owner": "toaq",
"ref": "master",
- "repo": "serial-predicate-engine",
+ "repo": "dictionary",
"type": "github"
}
},
@@ -123,6 +106,23 @@
"repo": "flake-utils",
"type": "github"
}
+ },
+ "zugai": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1667776834,
+ "narHash": "sha256-RATF7x6V2a1IKZGAU6NcM0KrKFL4MgGu4Jas/d/IWFQ=",
+ "owner": "toaq",
+ "repo": "zugai",
+ "rev": "38646646b34bb72d1ef01c8d37fcab3d238c5f0b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "toaq",
+ "ref": "main",
+ "repo": "zugai",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index d726582..01f564d 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,15 +2,17 @@
inputs = {
flake-utils.url = "github:numtide/flake-utils/master";
gomod2nix.url = "github:tweag/gomod2nix/master";
- nuigui-upstream.url = "github:uakci/nuigui/master";
- nuigui-upstream.flake = false;
- serial-predicate-engine-upstream.url =
- "github:acotis/serial-predicate-engine/master";
- serial-predicate-engine-upstream.flake = false;
+ toaq-dictionary = {
+ url = "github:toaq/dictionary/master";
+ flake = false;
+ };
+ zugai = {
+ url = "github:toaq/zugai/main";
+ flake = false;
+ };
};
- outputs = { self, nixpkgs, gomod2nix, nuigui-upstream
- , serial-predicate-engine-upstream, flake-utils, ... }:
+ outputs = { self, nixpkgs, gomod2nix, flake-utils, zugai, toaq-dictionary, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = (import nixpkgs {
@@ -26,55 +28,32 @@
'';
imagemagickWithPango = imagemagick.overrideAttrs
(a: { buildInputs = a.buildInputs ++ [ pango ]; });
- schemePkgs = lib.mapAttrs (name:
- { src, install, patches }:
- pkgs.stdenv.mkDerivation {
- inherit src name patches;
- buildInputs = [ guile ];
- installPhase = ''
- mkdir -p $out/bin
- cp -r ./* $out
- cp "${writers.writeBash "${name}-start" install}" $out/bin/${name}
- '';
- }) {
- nuigui = {
- src = nuigui-upstream;
- patches = [ ./patches/nui.patch ];
- install = ''
- cd $(dirname $0)/../
- ${guile}/bin/guile web.scm
- '';
- };
- serial-predicate-engine = {
- src = serial-predicate-engine-upstream;
- patches = [ ./patches/spe.patch ];
- install = ''
- cd $(dirname $0)/../web/
- ${guile}/bin/guile webservice.scm
- '';
- };
- };
+ expand-serial = runCommand "expand-serial" { } ''
+ mkdir -p $out/bin
+ tee >$out/bin/expand-serial <<EOF
+ #!/bin/sh
+ ${pkgs.python3}/bin/python ${zugai}/src/expand_serial.py ${toaq-dictionary}/dictionary.json \$@
+ EOF
+ chmod +x $out/bin/expand-serial
+ '';
nuogai = buildGoApplication {
vendorSha256 = null;
runVend = true;
name = "nuogai";
src = ./.;
modules = ./gomod2nix.toml;
- buildInputs = builtins.attrValues schemePkgs;
nativeBuildInputs = [ makeWrapper ];
postFixup = ''
wrapProgram $out/bin/nuogai --prefix PATH : ${
- lib.makeBinPath [ imagemagickWithPango ]
+ lib.makeBinPath [ imagemagickWithPango expand-serial ]
}
'';
};
in {
- defaultPackage = nuogai;
- packages = schemePkgs // {
- inherit toaqScript nuogai imagemagickWithPango;
- };
nixosModule = { config, pkgs, lib, ... }@args:
import ./module.nix (args // { inherit self system; });
devShells.${system} = gomod2nix.devShells.${system};
+ defaultPackage = nuogai;
+ packages = { inherit nuogai expand-serial toaqScript; };
});
}
diff --git a/module.nix b/module.nix
index 311ee29..f1435c4 100644
--- a/module.nix
+++ b/module.nix
@@ -3,45 +3,26 @@ let cfg = config.services.nuogai;
in with lib; {
options.services.nuogai = {
enable = mkEnableOption "Enables the nuogaı Discord Bot";
- ports = listToAttrs
- (map (flip attrsets.nameValuePair (mkOption { type = types.port; })) [
- "nuigui"
- "serial-predicate-engine"
- "toadua"
- ]);
+ toaduaHost = mkOption { type = types.str; };
+ zugaiHost = mkOption { type = types.str; };
tokenPath = mkOption { type = types.path; };
};
- config = let enable = cfg.enable;
- in {
- fonts.fonts = optionals enable [ self.packages.${system}.toaqScript ];
- systemd.services = optionalAttrs enable (mapAttrs (k: v:
- {
- wants = [ "network-online.target" ];
- } // (v self.packages.${system}.${k})) {
- nuogai = pkg: {
- description = "Toaq Discord bot";
- wantedBy = [ "multi-user.target" ];
- wants = [ "nuigui.service" "serial-predicate-engine.service" ];
- environment = {
- NUI_PORT = toString cfg.ports.nuigui;
- SPE_PORT = toString cfg.ports.serial-predicate-engine;
- TOA_PORT = toString cfg.ports.toadua;
- };
- script = ''
- export TOKEN=$(cat ${cfg.tokenPath})
- ${pkg}/bin/nuogai
- '';
- };
- nuigui = pkg: {
- serviceConfig.WorkingDirectory = pkg;
- serviceConfig.ExecStart = "${pkg}/bin/nuigui";
- environment.PORT = toString cfg.ports.nuigui;
- };
- serial-predicate-engine = pkg: {
- serviceConfig.WorkingDirectory = pkg;
- serviceConfig.ExecStart = "${pkg}/bin/serial-predicate-engine";
- environment.PORT = toString cfg.ports.serial-predicate-engine;
- };
- });
+ config = {
+ fonts.fonts = optionals cfg.enable [ self.packages.${system}.toaqScript ];
+ services.nuogai.zugaiHost = lib.mkDefault "https://zugai.toaq.me";
+ systemd.services.nuogai = {
+ inherit (cfg) enable;
+ description = "Toaq Discord bot";
+ wantedBy = [ "multi-user.target" ];
+ wants = [ "network-online.target" ];
+ environment = {
+ TOADUA_HOST = cfg.toaduaHost;
+ ZUGAI_HOST = cfg.zugaiHost;
+ };
+ script = ''
+ export NUOGAI_TOKEN=$(cat ${cfg.tokenPath})
+ ${self.packages.${system}.nuogai}/bin/nuogai
+ '';
+ };
};
}