Socket
Socket
Sign inDemoInstall

matrix-slack-parser

Package Overview
Dependencies
12
Maintainers
2
Versions
15
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    matrix-slack-parser

A parser for matrix and discord messages to each others format


Version published
Maintainers
2
Install size
3.50 MB
Created

Readme

Source

matrix-slack-parser

This package is a message parser for sending messages between Matrix and Slack. For that, it has two parsers: SlackMessageParser and MatrixMessageParser.

Installation

npm install --save matrix-slack-parser

SlackMessageParser

Example code:

import { SlackMessageParser, ISlackMessageParserOpts } from "matrix-slack-parser";

const parser = new SlackMessageParser();
const opts = {
    callbacks: {
        getUser: async (id: string, name: string) => null,
        getChannel: async (id: string, name: string) => null,
        getUsergroup: async (id: string, name: string) => null,
        getTeam: async (id: string, name: string) => null,
        urlToMxc: async (url: string) => null,
    },
} as ISlackMessageParserOpts;
const message = msg; // a slack message object. The one with the keys "text" and optionally "blocks", "attachments"
const result = await parser.FormatMessage(opts, message);
console.log(results); // this is a matrix message content, ready to be sent

All options of ISlackMessageParserOpts:

  • callbacks: ISlackMessageParserCallbacks, the callbacks to handle
    • getUser: async (id: string, name: string) => Promise<ISlackMessageParserEntity | null>, resolves to either the information on the slack user or to null. name cannot be trusted.
    • getChannel: async (id: string, name: string) => Promise<ISlackMessageParserEntity | null>, resolves to either the information on the slack channel or to null. name cannot be trusted.
    • getUsergroup: async (id: string, name: string) => Promise<ISlackMessageParserEntity | null>, resolves to either the information on the slack usergroup or to null. name cannot be trusted.
    • getTeam: async (id: string, name: string) => Promise<ISlackMessageParserEntity | null>, resolves to either the information on the slack team or to null. name cannot be trusted.
    • urlToMxc: async (url: string) => Promise<string | null>, resolves to an mxc url associated with the http url, or null. If you don't de-dupe images it is recommended to resolve to null.

All properties of ISlackMessageParserEntity:

  • name: string, the name of the entity
  • mxid: string, the resulting matrix ID of the entity

MatrixMessageParser

Example code:

import { MatrixMessageParser, IMatrixMessageParserOpts } from "matrix-slack-parser":

const parser = new MatrixMessageParser)();
const opts = {
    callbacks: {
        canNotifyRoom: async () => false,
        getUserId: async (mxid: string) => null,
        getChannelId: async (mxid: string) => null,
        mxcUrlToHttp: (mxc: string) => "http://example.com",
    },
} as IMatrixMessageParserOpts;

const msg = { // raw matrix event content
    msgtype: "m.text",
    body: "**blah**",
    format: "org.matrix.custom.html",
    formatted_body: "<strong>blah</strong>",
};

const result = await parser.FormatMessage(opts, msg);
console.log(result); // a slack message ready to send, with the properties "text" and "blocks"

It 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 handle
    • canNotifyRoom: async () => Promise<boolean>, return if that particular user can notify that particular room
    • getUserId: async (mxid: string) => Promise<string | null>, return the slack user ID given an mxid, or null
    • getChannelId: async (mxid: string) => Promise<string | null>, return the slack channel ID given an mxid, or null
    • mxcUrlToHttp: (mxc: string) => string, resolve an mxc uri to a publicly available http url.

Returned is a slack message object. If you only want to send the markdown-formatted message, use result.text. If you want to also send the blocks, send both result.text and result.blocks, so something like:

await web.chat.postMessage({
    ...result,
    channel,
    as_user: true,
});

FAQs

Last updated on 14 Apr 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc