view mod_discodot/mod_discodot.tl @ 4579:b305814bd930

mod_muc_dicebot: A thing to roll dice Do you see what happens, Jitsi? Do you see what happens when you make it hard for me to use a proper bot? This is what happens, Jitsi. This is what happens when you meet a stranger in the alps! Ahem. In all seriousness, this is more of a quick hack than anything else. It will look for `.r` in MUC messages and if it finds it, it'll interpret it as an instruction to roll a few dice. Injects the results in the body of the message. Eats the message alive if it is malformed.
author Jonas Schäfer <jonas@wielicki.name>
date Sat, 29 May 2021 15:17:05 +0200
parents 253df0798996
children
line wrap: on
line source

local cm = require"core.configmanager";

local function format_host(host:string, conf:{string:any}) : string
	if host == "*" then
		return "Global";
	end
	local component_module = conf["component_module"];
	if component_module is string then
		if component_module == "component" then
			return string.format("Component %q", host);
		else
			return string.format("Component %q %q", host, component_module);
		end
	else
		return string.format("VirtualHost %q", host);
	end
end

function module.command(arg : { string }) : integer

	local config : { string : { string : any } } = cm.getconfig();

	print"digraph \"prosody\" {"
	for host, conf in pairs(config) do
		print(string.format("%q [label=%q]", host, format_host(host, conf)));
		local parent = host:match("%.(.*)");
		if parent and rawget(config, parent) then
			print(string.format("%q -> %q", parent, host));
		end
		local disco_items = conf["disco_items"]
		if disco_items is { { string, string } } then
			for _, pair in ipairs(disco_items) do
				print(string.format("%q -> %q", host, pair[1]));
			end
		end

	end

	print"}"

	return 0
end