1.11.4 • Published 2 years ago
@deurstann/matrix-discord-parser v1.11.4
matrix-discord-parser
This package is a message parser for sending messages between Matrix and
Discord. For that, it has two parsers: DiscordMessageParser and
MatrixMessageParser.
DiscordMessageParser
Example code:
import { DiscordMessageParser, IDiscordMessageParserOpts } from "matrix-discord-parser";
const parser = new DiscordMessageParser();
const opts = {
callbacks: {
getUser: async (id: string) => null,
getChannel: async (id: string) => null,
getEmoji: async (name: string, animated: boolean, id: string) => null;
},
} as IDiscordMessageParserOpts;
const message = msg; // Type Discord.Message from discord.js
const result = await parser.FormatMessage(opts, msg);
console.log(result.body); // the body of the matrix message
console.log(result.formattedBody); // the formatted body of the matrix message
console.log(result.msgtype); // the msgtype of the matrix messageAll options of IDiscordMessageParserOpts:
callbacks:IDiscordMessageParserCallbacks, the callbacks to handlegetUser:async (id: string) => Promise<IDiscordMessageParserEntity | null>, resolves to either the information on the specified discord user or to nullgetChannel:async (id: string) => Promise<IDiscordMessageParserEntity | null>, resolves to either the information of the specified discord channel or to nullgetEmoji:async (name: string, animated: boolean, id: string) => Promise<string | null>, resolves to either the mxc uri of the specified discord emoji or to null
All properties of IDiscordMessageParserEntity:
name:string, the name of the entitymxid:string, the resulting matrix ID of the entity
All properties of IDiscordMessageParserResult:
body:string, the body of the resultformattedBody:string, the formatted (html) body of the resultmsgtype:string, the matrix msgtype of the result
MatrixMessageParser
Example code:
import { MatrixMessageParser, IMatrixMessageParserOpts } from "matrix-discord-parser";
const parser = new MatrixMessageParser();
const opts = {
callbacks: {
canNotifyRoom: async () => false,
getUserId: async (mxid: string) => null,
getChannelId: async (mxid: string) => null,
getEmoji: async (mxc: string, name: string) => null,
mxcUrlToHttp: async (mxc: string) => "http://example.com",
},
displayname: "Alice",
determineCodeLanguage: true,
} as IMatrixMessageParserOpts;
const msg = { // raw matrix event content
msgtype: "m.text",
body: "**blah**",
format: "org.matrix.custom.html",
formatted_body: "<strong>blah</strong>",
};
const parsed = await parser.FormatMessage(opts, msg);
msg.send(parsed); // send this message to discordIt is expected to create the options for a message within a closure so that the callbacks can determine if, for that particular message, the author may e.g. notify that particular room.
All options of IMatrixMessageParserOpts:
callbacks:IMatrixMessageParserCallbacks, the callbacks to handlecanNotifyRoom:async () => Promise<boolean>, return if that particular user can notify that particular roomgetUserId:async (mxid: string) => Promise<string | null>, return the discord user ID given an mxid, or nullgetChannelId:async (mxid: string) => Promise<string | null>, return the discord channel ID given an mxid, or nullgetEmoji:async (mxc: string, name: string) => Promise<Discord.Emoji | null>, return a discord emoji given an mxc uri and a name, or nullmxcUrlToHttp:async (mxc: string) => Promise<string>, resolve an mxc uri to a publicly available http url.
displayname:string, the display name of the sender of the message (used form.emoteparsing)determineCodeLanguage:Boolean(defaultfalse), wether the language of code-blocks should be auto-determined, if not specified
Returned is a discord-formatted string, ready to be sent.