Skip to content

the-draupnir-project/interface-manager

Repository files navigation

@the-draupnir-project/interface-manager

This library provides a command-oriented presentation interface for Matrix bots. This is the library used by Draupnir to provide command parsing, rendering and interaction prompts.

This library also includes a JSXFactory that can transform JSX templates into org.matrix.custom.html and plain text fallback, so that it is possible to send Matrix events from one source.

const KickCommand = describeCommand({
  summary: "A command to test keyword arguments",
  parameters: tuple({
    name: "user",
    acceptor: MatrixUserIDPresentationType,
  }),
  keywords: {
    keywordDescriptions: {
      glob: {
        isFlag: true,
        description:
          "Allows globs to be used to kick several users from rooms.",
      },
    },
  },
  async executor(
    draupnir: Draupnir,
    _info,
    keywords
  ): Promise<Result<KickedUsers>> {
    return await draupnir.kickUsers(
      user,
      keywords.getKeywordValue("glob", false)
    );
  },
});

DraupnirInterfaceAdaptor.describeRenderer(
  KickCommand,
  {
    JSXRenderer(result) {
      if (isError(result)) {
        return Ok(undefined);
      }
      return Ok(
        <root>
          <details>
            <summary>Removed {result.ok.length} users from protected rooms.</summary>
            {renderKickedUsers(result.ok)}
          </details>
        </root>
      );
    }
  }
);

Getting started

At some point in the near future we will create a simple bot that will act as a template repository that can be copied and edited.

In the meantime Draupnir's glue/setup code for the library can be found here and this code is licensed under Apache-2.0.

Contributing & Opening Issues

Draupnir wants to be yours as much as it is ours. Please see or contributing document, but do not worry too much about following the guidance to the letter. And keep that in mind throughout.

Supported by

NLnet foundation

Draupnir is supported by the NLnet foundation and NGI Zero under the NGI Zero Core programme.

You can find details of the work that is being supported from NLnet here and the goals here.