matrix-wug/index.ts

94 lines
3.2 KiB
TypeScript
Raw Normal View History

2019-03-01 02:45:09 +01:00
const version = "2.1.1";
2018-12-03 02:12:20 +01:00
import x2i from "./x2i";
2019-02-27 01:21:39 +01:00
import { existsSync } from "fs";
2018-12-03 02:12:20 +01:00
2019-02-27 01:21:39 +01:00
const config = (existsSync("./config.json")) ? require("./config.json") : {};
2018-12-03 02:12:20 +01:00
const MatrixClient = require("matrix-bot-sdk").MatrixClient;
const AutojoinRoomsMixin = require("matrix-bot-sdk").AutojoinRoomsMixin;
const homeserver = (config.homeserver || process.env.WUG_HOMESERVER || process.env.MATRIXDEV_HOMESERVER);
2019-02-27 01:21:39 +01:00
const token = (config.token || process.env.WUG_TOKEN || process.env.MATRIXDEV_TOKEN);
2019-02-26 23:18:36 +01:00
const client = new MatrixClient(homeserver, token);
2018-12-03 02:12:20 +01:00
AutojoinRoomsMixin.setupOnClient(client);
2019-02-27 01:21:39 +01:00
const myself = client.getUserId();
2018-12-03 02:12:20 +01:00
2019-02-26 01:21:08 +01:00
client.on("room.message", handle);
async function handle(roomId, event) {
2018-12-03 02:12:20 +01:00
if (!event["content"]) return;
2019-02-26 01:21:08 +01:00
console.log("Got message!");
if (event.unsigned.age > 1000 * 60) { console.log("Message was old!"); return; };
if (event.sender === await myself) { console.log("Wait a minute... That's me!"); return;};
2019-02-27 01:21:39 +01:00
if (event.content.body === "!xhelp" || event.content.body === (await client.getUserProfile(await myself)).displayname + ": help") {help(roomId); return;};
2019-03-01 02:45:09 +01:00
if (event.content.body === "!xik") {xik(roomId); return;};
if (event.content.body === "!pie") {xpie(roomId); return;};
2019-02-26 01:21:08 +01:00
if (event.content.body === "!xdebug") {debug(roomId); return;};
console.log("Trying to convert the message!");
2018-12-03 02:12:20 +01:00
var converted = x2i(event.content.body);
if (converted === "") return;
client.sendNotice(roomId, converted);
2019-02-26 01:21:08 +01:00
};
function help(roomId) {
2019-03-01 02:45:09 +01:00
var message = `Hi I can help you translate X-SAMPA, Z-SAMPA to IPA!
Use (x/z/p/i/ik) together with either / or [] as delimeters
2019-02-27 01:21:39 +01:00
x/"hEloU/ z[or\` 5aIk DIz] p/mreghnom/ 😀
2019-03-01 02:45:09 +01:00
x - X-SAMPA - https://en.wikipedia.org/wiki/X-SAMPA
z - Z-SAMPA - http://www.kneequickie.com/kq/Z-SAMPA
p - Proto-Indo-European Notation (see !xpie)
i - Inuktitut Syllabics | https://en.wikipedia.org/wiki/Inuktitut_syllabics
ik - Iñupiatun Orthography (see !xik)
2019-02-27 01:21:39 +01:00
Find my source at https://github.com/Dali99/matrix-wug`;
2019-02-26 01:21:08 +01:00
2019-02-27 01:21:39 +01:00
client.sendNotice(roomId, message);
2019-02-26 01:21:08 +01:00
}
2019-03-01 02:45:09 +01:00
function xpie(roomId) {
var message = `This is a fun PIE notation
a preceding " is acute accent
a following : is the macron
a following . is the syllabicity marker
h always becomes superscript and v is superscript w.
Palato-velars are marked with a following ' and x1, x2, x3 etc. yields the laryngeals, with x@ for the subscript a laryngeal, and xx for an unknown laryngeal.
There's probably more, but this is best learned by experimenting (or reading https://github.com/dali99/matrix-wug/blob/master/x2i/apie-keys.yaml)
Thanks to conniebot (xsduan) for the encoding`;
client.sendNotice(roomId, message);
}
function xik(roomId) {
var message = `There are several distinct Iñupiatun orthographies, and I can type all of them.
& for miniscule ł
l% and n% for ł and ñ each
g^, l^, &^ (or l%^ and l^%) n^, and r^ for ġ ł̣ ŋ ȓ each
Thanks to Tuugaalikkuluk for the encoding`;
client.sendNotice(roomId, message);
}
2019-02-26 01:21:08 +01:00
async function debug(roomId) {
2019-02-27 01:21:39 +01:00
var message = `Hi my name is ${await myself}, and I want to help you debug me!
I run version ${version} 💝 and currently reside in ${roomId}`;
2019-02-26 01:21:08 +01:00
2019-02-27 01:21:39 +01:00
client.sendNotice(roomId, message);
2019-02-26 01:21:08 +01:00
}
2018-12-03 02:12:20 +01:00
client.start().then(() => console.log("Client started!"));