You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-04 11:51:45 +03:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/develop' into feature_confetti#14676
This commit is contained in:
		@@ -38,13 +38,14 @@ import {inviteUsersToRoom} from "./RoomInvite";
 | 
			
		||||
import { WidgetType } from "./widgets/WidgetType";
 | 
			
		||||
import { Jitsi } from "./widgets/Jitsi";
 | 
			
		||||
import { parseFragment as parseHtml } from "parse5";
 | 
			
		||||
import sendBugReport from "./rageshake/submit-rageshake";
 | 
			
		||||
import SdkConfig from "./SdkConfig";
 | 
			
		||||
import BugReportDialog from "./components/views/dialogs/BugReportDialog";
 | 
			
		||||
import { ensureDMExists } from "./createRoom";
 | 
			
		||||
import { ViewUserPayload } from "./dispatcher/payloads/ViewUserPayload";
 | 
			
		||||
import { Action } from "./dispatcher/actions";
 | 
			
		||||
import { EffectiveMembership, getEffectiveMembership, leaveRoomBehaviour } from "./utils/membership";
 | 
			
		||||
import SdkConfig from "./SdkConfig";
 | 
			
		||||
import SettingsStore from "./settings/SettingsStore";
 | 
			
		||||
import {UIFeature} from "./settings/UIFeature";
 | 
			
		||||
 | 
			
		||||
// XXX: workaround for https://github.com/microsoft/TypeScript/issues/31816
 | 
			
		||||
interface HTMLInputEvent extends Event {
 | 
			
		||||
@@ -89,6 +90,7 @@ interface ICommandOpts {
 | 
			
		||||
    runFn?: RunFn;
 | 
			
		||||
    category: string;
 | 
			
		||||
    hideCompletionAfterSpace?: boolean;
 | 
			
		||||
    isEnabled?(): boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class Command {
 | 
			
		||||
@@ -99,6 +101,7 @@ export class Command {
 | 
			
		||||
    runFn: undefined | RunFn;
 | 
			
		||||
    category: string;
 | 
			
		||||
    hideCompletionAfterSpace: boolean;
 | 
			
		||||
    _isEnabled?: () => boolean;
 | 
			
		||||
 | 
			
		||||
    constructor(opts: ICommandOpts) {
 | 
			
		||||
        this.command = opts.command;
 | 
			
		||||
@@ -108,6 +111,7 @@ export class Command {
 | 
			
		||||
        this.runFn = opts.runFn;
 | 
			
		||||
        this.category = opts.category || CommandCategories.other;
 | 
			
		||||
        this.hideCompletionAfterSpace = opts.hideCompletionAfterSpace || false;
 | 
			
		||||
        this._isEnabled = opts.isEnabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getCommand() {
 | 
			
		||||
@@ -127,6 +131,10 @@ export class Command {
 | 
			
		||||
    getUsage() {
 | 
			
		||||
        return _t('Usage') + ': ' + this.getCommandWithArgs();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    isEnabled() {
 | 
			
		||||
        return this._isEnabled ? this._isEnabled() : true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function reject(error) {
 | 
			
		||||
@@ -155,6 +163,19 @@ export const Commands = [
 | 
			
		||||
        },
 | 
			
		||||
        category: CommandCategories.messages,
 | 
			
		||||
    }),
 | 
			
		||||
    new Command({
 | 
			
		||||
        command: 'lenny',
 | 
			
		||||
        args: '<message>',
 | 
			
		||||
        description: _td('Prepends ( ͡° ͜ʖ ͡°) to a plain-text message'),
 | 
			
		||||
        runFn: function(roomId, args) {
 | 
			
		||||
            let message = '( ͡° ͜ʖ ͡°)';
 | 
			
		||||
            if (args) {
 | 
			
		||||
                message = message + ' ' + args;
 | 
			
		||||
            }
 | 
			
		||||
            return success(MatrixClientPeg.get().sendTextMessage(roomId, message));
 | 
			
		||||
        },
 | 
			
		||||
        category: CommandCategories.messages,
 | 
			
		||||
    }),
 | 
			
		||||
    new Command({
 | 
			
		||||
        command: 'plain',
 | 
			
		||||
        args: '<message>',
 | 
			
		||||
@@ -778,6 +799,7 @@ export const Commands = [
 | 
			
		||||
        command: 'addwidget',
 | 
			
		||||
        args: '<url | embed code | Jitsi url>',
 | 
			
		||||
        description: _td('Adds a custom widget by URL to the room'),
 | 
			
		||||
        isEnabled: () => SettingsStore.getValue(UIFeature.Widgets),
 | 
			
		||||
        runFn: function(roomId, widgetUrl) {
 | 
			
		||||
            if (!widgetUrl) {
 | 
			
		||||
                return reject(_t("Please supply a widget URL or embed code"));
 | 
			
		||||
@@ -861,12 +883,12 @@ export const Commands = [
 | 
			
		||||
                                _t('WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session' +
 | 
			
		||||
                                    ' %(deviceId)s is "%(fprint)s" which does not match the provided key ' +
 | 
			
		||||
                                    '"%(fingerprint)s". This could mean your communications are being intercepted!',
 | 
			
		||||
                                    {
 | 
			
		||||
                                        fprint,
 | 
			
		||||
                                        userId,
 | 
			
		||||
                                        deviceId,
 | 
			
		||||
                                        fingerprint,
 | 
			
		||||
                                    }));
 | 
			
		||||
                                {
 | 
			
		||||
                                    fprint,
 | 
			
		||||
                                    userId,
 | 
			
		||||
                                    deviceId,
 | 
			
		||||
                                    fingerprint,
 | 
			
		||||
                                }));
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        await cli.setDeviceVerified(userId, deviceId, true);
 | 
			
		||||
@@ -880,7 +902,7 @@ export const Commands = [
 | 
			
		||||
                                    {
 | 
			
		||||
                                        _t('The signing key you provided matches the signing key you received ' +
 | 
			
		||||
                                            'from %(userId)s\'s session %(deviceId)s. Session marked as verified.',
 | 
			
		||||
                                            {userId, deviceId})
 | 
			
		||||
                                        {userId, deviceId})
 | 
			
		||||
                                    }
 | 
			
		||||
                                </p>
 | 
			
		||||
                            </div>,
 | 
			
		||||
@@ -960,19 +982,13 @@ export const Commands = [
 | 
			
		||||
        command: "rageshake",
 | 
			
		||||
        aliases: ["bugreport"],
 | 
			
		||||
        description: _td("Send a bug report with logs"),
 | 
			
		||||
        isEnabled: () => !!SdkConfig.get().bug_report_endpoint_url,
 | 
			
		||||
        args: "<description>",
 | 
			
		||||
        runFn: function(roomId, args) {
 | 
			
		||||
            return success(
 | 
			
		||||
                sendBugReport(SdkConfig.get().bug_report_endpoint_url, {
 | 
			
		||||
                    userText: args,
 | 
			
		||||
                    sendLogs: true,
 | 
			
		||||
                }).then(() => {
 | 
			
		||||
                    const InfoDialog = sdk.getComponent('dialogs.InfoDialog');
 | 
			
		||||
                    Modal.createTrackedDialog('Slash Commands', 'Rageshake sent', InfoDialog, {
 | 
			
		||||
                        title: _t('Logs sent'),
 | 
			
		||||
                        description: _t('Thank you!'),
 | 
			
		||||
                    });
 | 
			
		||||
                }),
 | 
			
		||||
                Modal.createTrackedDialog('Slash Commands', 'Bug Report Dialog', BugReportDialog, {
 | 
			
		||||
                    initialText: args,
 | 
			
		||||
                }).finished,
 | 
			
		||||
            );
 | 
			
		||||
        },
 | 
			
		||||
        category: CommandCategories.advanced,
 | 
			
		||||
@@ -1064,7 +1080,7 @@ Commands.forEach(cmd => {
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export function parseCommandString(input) {
 | 
			
		||||
export function parseCommandString(input: string) {
 | 
			
		||||
    // trim any trailing whitespace, as it can confuse the parser for
 | 
			
		||||
    // IRC-style commands
 | 
			
		||||
    input = input.replace(/\s+$/, '');
 | 
			
		||||
@@ -1091,10 +1107,10 @@ export function parseCommandString(input) {
 | 
			
		||||
 * processing the command, or 'promise' if a request was sent out.
 | 
			
		||||
 * Returns null if the input didn't match a command.
 | 
			
		||||
 */
 | 
			
		||||
export function getCommand(roomId, input) {
 | 
			
		||||
export function getCommand(roomId: string, input: string) {
 | 
			
		||||
    const {cmd, args} = parseCommandString(input);
 | 
			
		||||
 | 
			
		||||
    if (CommandMap.has(cmd)) {
 | 
			
		||||
    if (CommandMap.has(cmd) && CommandMap.get(cmd).isEnabled()) {
 | 
			
		||||
        return () => CommandMap.get(cmd).run(roomId, args, cmd);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user