k 5 Reaktor/plugins: converted plugins from makefu/2/Reaktor
This commit is contained in:
parent
8f98ae9842
commit
669e4be273
|
@ -1,38 +1,118 @@
|
||||||
{ stdenv, lib, pkgs, makeWrapper }:
|
{ stdenv, lib, pkgs, makeWrapper }:
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
buildReaktorPlugin = { name
|
# Begin API
|
||||||
# TODO: profiles
|
buildBaseReaktorPlugin = { name
|
||||||
, extraConfig
|
, config # python extra configuration for plugin
|
||||||
, phases ? []
|
, phases ? []
|
||||||
, ... } @ attrs:
|
, ... } @ attrs:
|
||||||
stdenv.mkDerivation (attrs // {
|
stdenv.mkDerivation (attrs // {
|
||||||
name = "Reaktor-plugin-" + name;
|
name = "Reaktor-plugin-" + name;
|
||||||
phases = phases ++ [ "installPhase" ];
|
|
||||||
isReaktorPlugin = true;
|
isReaktorPlugin = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
random-emoji = buildReaktorPlugin rec {
|
buildSimpleReaktorPlugin = name: { script
|
||||||
name = "random-emoji";
|
, path ? []
|
||||||
src = ./scripts/random-emoji.sh;
|
, env ? {}
|
||||||
|
, pattern ? ""
|
||||||
|
, ... } @ attrs:
|
||||||
|
let
|
||||||
|
path_env = { "PATH" = lib.makeSearchPath "bin" (path ++ [ pkgs.coreutils ]); };
|
||||||
|
src_dir = pkgs.substituteAll ( {
|
||||||
|
inherit name;
|
||||||
|
dir = "bin";
|
||||||
|
isExecutable = true;
|
||||||
|
src = script;
|
||||||
|
});
|
||||||
|
src_file = "${src_dir}/bin/${name}";
|
||||||
|
config = ''
|
||||||
|
public_commands.insert(0,{
|
||||||
|
'capname' : "${name}",
|
||||||
|
'pattern' : ${if pattern == "" then
|
||||||
|
''indirect_pattern.format("${name}")'' else
|
||||||
|
''"${pattern}"'' },
|
||||||
|
'argv' : ["${src_file}"],
|
||||||
|
'env' : ${builtins.toJSON path_env // env})})
|
||||||
|
'';
|
||||||
|
config_file = pkgs.writeText "plugin.py" config;
|
||||||
|
in buildBaseReaktorPlugin (attrs // rec {
|
||||||
|
inherit name config;
|
||||||
|
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
buildInputs = [ makeWrapper ];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin $out/etc/Reaktor
|
||||||
|
ln -s ${src_file} $out/bin
|
||||||
|
wrapProgram $out/bin/${name} \
|
||||||
|
--prefix PATH : ${path_env.PATH}
|
||||||
|
ln -s ${config_file} $out/etc/Reaktor/plugin.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
});
|
||||||
|
# End API
|
||||||
|
|
||||||
|
# Begin Plugins
|
||||||
|
random-emoji = buildSimpleReaktorPlugin "emoji" {
|
||||||
|
path = with pkgs; [ gnused gnugrep xmlstarlet curl ];
|
||||||
|
script = ./scripts/random-emoji.sh;
|
||||||
|
};
|
||||||
|
|
||||||
|
sed-plugin = buildSimpleReaktorPlugin "sed-plugin" {
|
||||||
|
path = [ pkgs.gnused ];
|
||||||
|
# only support s///gi the plugin needs to see every msg
|
||||||
|
# TODO: this will eat up the last regex, fix Reaktor to support fallthru
|
||||||
|
pattern = "^(?P<args>.*)$$";
|
||||||
|
script = ./scripts/sed-plugin.py;
|
||||||
|
};
|
||||||
|
|
||||||
|
shack-correct = buildSimpleReaktorPlugin "shack-correct" {
|
||||||
|
path = [ pkgs.gnused ];
|
||||||
|
pattern = "^(?P<args>.*Shack.*)$$";
|
||||||
|
script = ./scripts/shack-correct.sh;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixos-version = buildSimpleReaktorPlugin "nixos-version" {
|
||||||
|
script = pkgs.writeScript "nixos-version" ''
|
||||||
|
#! /bin/sh
|
||||||
|
. /etc/os-release
|
||||||
|
echo "$PRETTY_NAME"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
stockholm-issue = buildSimpleReaktorPlugin "stockholm-issue" {
|
||||||
|
script = ./scripts/random-issue.sh;
|
||||||
|
path = with pkgs; [ git gnused lentil ];
|
||||||
|
env = { "origin"= "http://cgit.gum/stockholm"; };
|
||||||
|
};
|
||||||
|
|
||||||
|
titlebot =
|
||||||
|
let
|
||||||
|
pypkgs = pkgs.python3Packages;
|
||||||
|
titlebot_cmds = pypkgs.buildPythonPackage {
|
||||||
|
name = "titlebot_cmds";
|
||||||
|
propagatedBuildInputs = with pypkgs; [ setuptools ];
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = "https://github.com/makefu/reaktor-titlebot/archive/2.1.0.tar.gz";
|
||||||
|
sha256 = "0wvf09wmk8b52f9j65qrw81nwrhs9pfhijwrlkzp5l7l2q8cjkp6";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in buildBaseReaktorPlugin rec {
|
||||||
|
name = "titlebot";
|
||||||
phases = [ "installPhase" ];
|
phases = [ "installPhase" ];
|
||||||
buildInputs = [ makeWrapper ];
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out
|
||||||
install -vm 755 ${src} $out/bin/random-emoji.sh
|
ln -s ${titlebot_cmds}/* $out
|
||||||
wrapProgram $out/bin/random-emoji.sh \
|
|
||||||
--prefix PATH : ${lib.makeSearchPath "bin" (with pkgs; [
|
|
||||||
coreutils
|
|
||||||
gnused
|
|
||||||
gnugrep
|
|
||||||
xmlstarlet
|
|
||||||
curl])};
|
|
||||||
'';
|
'';
|
||||||
extraConfig = ''
|
config = ''
|
||||||
public_commands.insert(0,{
|
def titlebot_cmd(cmd):
|
||||||
'capname' : "emoji",
|
from os import environ
|
||||||
'pattern' : indirect_pattern.format("emoji"),
|
return { 'capname': cmd,
|
||||||
'argv' : ["random-emoji.sh"])
|
'env': { 'TITLEDB':
|
||||||
|
environ['state_dir']+'/suggestions.json' },
|
||||||
|
'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P<args>.*))?$$',
|
||||||
|
'argv': [ '${titlebot_cmds}/bin/' + cmd ] }
|
||||||
|
for i in ['up','help','list','top','new']:
|
||||||
|
public_commands.insert(0,titlebot_cmd(i))
|
||||||
|
commands.insert(0,titlebot_cmd('clear'))
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
_:
|
|
||||||
{
|
|
||||||
# implementation of the complete Reaktor bot
|
|
||||||
imports = [
|
|
||||||
#./stockholmLentil.nix
|
|
||||||
./simpleExtend.nix
|
|
||||||
./random-emoji.nix
|
|
||||||
./titlebot.nix
|
|
||||||
./shack-correct.nix
|
|
||||||
./sed-plugin.nix
|
|
||||||
];
|
|
||||||
krebs.Reaktor.nickname = "Reaktor|bot";
|
|
||||||
krebs.Reaktor.enable = true;
|
|
||||||
|
|
||||||
krebs.Reaktor.extraEnviron = {
|
|
||||||
REAKTOR_CHANNELS = "#krebs,#binaergewitter,#shackspace";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
rpkg = pkgs.substituteAll( {
|
|
||||||
name="random-emoji";
|
|
||||||
dir= "bin";
|
|
||||||
isExecutable=true;
|
|
||||||
src= ./random-emoji.sh;
|
|
||||||
});
|
|
||||||
rpkg-path = lib.makeSearchPath "bin" (with pkgs; [
|
|
||||||
coreutils
|
|
||||||
gnused
|
|
||||||
gnugrep
|
|
||||||
xmlstarlet
|
|
||||||
curl]);
|
|
||||||
in {
|
|
||||||
# TODO: make origin a variable, <- module is generic enough to handle different origins, not only stockholm
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
public_commands.insert(0,{
|
|
||||||
'capname' : "emoji",
|
|
||||||
'pattern' : indirect_pattern.format("emoji"),
|
|
||||||
'argv' : ["${rpkg}/bin/random-emoji"],
|
|
||||||
'env' : { 'PATH':'${rpkg-path}' } })
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
curl http://emojicons.com/random -s | \
|
|
||||||
grep data-text | \
|
|
||||||
sed -n 's/.*>\(.*\)<\/textarea>/\1/p' | \
|
|
||||||
head -n 1 | \
|
|
||||||
xmlstarlet unesc
|
|
|
@ -1,18 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
script = ./sed-plugin.py;
|
|
||||||
in {
|
|
||||||
#TODO: this will eat up the last regex, fix Reaktor
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
public_commands.append({
|
|
||||||
'capname' : "sed-plugin",
|
|
||||||
# only support s///gi
|
|
||||||
'pattern' : '^(?P<args>.*)$$',
|
|
||||||
'argv' : ["${pkgs.python3}/bin/python3","${script}"],
|
|
||||||
'env' : { 'state_dir' : workdir,
|
|
||||||
'PATH':'${lib.makeSearchPath "bin" [pkgs.gnused]}' }})
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
script = pkgs.substituteAll ( {
|
|
||||||
name="shack-correct";
|
|
||||||
isExecutable=true;
|
|
||||||
dir = "";
|
|
||||||
src = ./shack-correct.sh;
|
|
||||||
});
|
|
||||||
in {
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
public_commands.insert(0,{
|
|
||||||
'capname' : "shack-correct",
|
|
||||||
'pattern' : '^(?P<args>.*Shack.*)$$',
|
|
||||||
'argv' : ["${script}"],
|
|
||||||
'env' : { }})
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
nixos-version-script = pkgs.writeScript "nix-version" ''
|
|
||||||
#! /bin/sh
|
|
||||||
. /etc/os-release
|
|
||||||
echo "$PRETTY_NAME"
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
public_commands.insert(0,{
|
|
||||||
'capname' : "nixos-version",
|
|
||||||
'pattern' : indirect_pattern.format("nixos-version"),
|
|
||||||
'argv' : ["${nixos-version-script}"],
|
|
||||||
'env' : { 'state_dir': workdir } })
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
random-issue = pkgs.substituteAll( {
|
|
||||||
name="random-issue";
|
|
||||||
dir= "bin";
|
|
||||||
isExecutable=true;
|
|
||||||
src= ./random-issue.sh;
|
|
||||||
});
|
|
||||||
random-issue-path = lib.makeSearchPath "bin" (with pkgs; [
|
|
||||||
coreutils
|
|
||||||
git
|
|
||||||
gnused
|
|
||||||
lentil]);
|
|
||||||
in {
|
|
||||||
# TODO: make origin a variable, <- module is generic enough to handle different origins, not only stockholm
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
public_commands.insert(0,{
|
|
||||||
'capname' : "stockholm-issue",
|
|
||||||
'pattern' : indirect_pattern.format("stockholm-issue"),
|
|
||||||
'argv' : ["${random-issue}/bin/random-issue"],
|
|
||||||
'env' : { 'state_dir': workdir,
|
|
||||||
'PATH':'${random-issue-path}',
|
|
||||||
'origin':'http://cgit.pnp/stockholm' } })
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{ stdenv,config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
pypkgs = pkgs.python3Packages;
|
|
||||||
titlebot_cmds = pypkgs.buildPythonPackage {
|
|
||||||
name = "titlebot_cmds";
|
|
||||||
propagatedBuildInputs = with pypkgs; [ setuptools ];
|
|
||||||
src = fetchurl {
|
|
||||||
# https://github.com/makefu/reaktor-titlebot tag 2.1.0
|
|
||||||
url = "https://github.com/makefu/reaktor-titlebot/archive/2.1.0.tar.gz";
|
|
||||||
sha256 = "0wvf09wmk8b52f9j65qrw81nwrhs9pfhijwrlkzp5l7l2q8cjkp6";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
pub_cmds = ["up" "help" "list" "top" "highest" "undo" ];
|
|
||||||
priv_cmds = [ "clear" ];
|
|
||||||
in {
|
|
||||||
# TODO: write identify file in
|
|
||||||
# {config.users.extraUsers.Reaktor.home}/state/admin.lst
|
|
||||||
krebs.Reaktor.extraConfig = ''
|
|
||||||
def titlebot_cmd(cmd):
|
|
||||||
return {
|
|
||||||
'capname': cmd,
|
|
||||||
'env': {
|
|
||||||
'TITLEDB':
|
|
||||||
'${config.users.extraUsers.Reaktor.home}/suggestions.json'
|
|
||||||
},
|
|
||||||
'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P<args>.*))?$$',
|
|
||||||
'argv': [ '${titlebot_cmds}/bin/' + cmd ] }
|
|
||||||
# TODO: for each element in ${titlebot_cmds}/bin/*
|
|
||||||
public_commands.insert(0,titlebot_cmd('up'))
|
|
||||||
public_commands.insert(0,titlebot_cmd('help'))
|
|
||||||
public_commands.insert(0,titlebot_cmd('list'))
|
|
||||||
public_commands.insert(0,titlebot_cmd('top'))
|
|
||||||
public_commands.insert(0,titlebot_cmd('new'))
|
|
||||||
commands.insert(0,titlebot_cmd('clear'))
|
|
||||||
'';
|
|
||||||
}
|
|
Loading…
Reference in a new issue