Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 50ecd8c

Browse files
committed
Make slash command errors translatable but also work in rageshakes
See #7372 (comment) We want the error to be translated for the user but not in our rageshake logs
1 parent 5e5c1af commit 50ecd8c

File tree

3 files changed

+29
-21
lines changed

3 files changed

+29
-21
lines changed

src/SlashCommands.tsx

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { logger } from "matrix-js-sdk/src/logger";
2727

2828
import { MatrixClientPeg } from './MatrixClientPeg';
2929
import dis from './dispatcher/dispatcher';
30-
import { _t, _td } from './languageHandler';
30+
import { _t, _td, newTranslatableError } from './languageHandler';
3131
import Modal from './Modal';
3232
import MultiInviter from './utils/MultiInviter';
3333
import { linkifyAndSanitizeHtml } from './HtmlUtils';
@@ -297,15 +297,10 @@ export const Commands = [
297297
return success((async () => {
298298
const unixTimestamp = Date.parse(args);
299299
if (!unixTimestamp) {
300-
throw new Error(
301-
// FIXME: Use newTranslatableError here instead
302-
// otherwise the rageshake error messages will be
303-
// translated too
304-
_t(
305-
// eslint-disable-next-line max-len
306-
'We were unable to understand the given date (%(inputDate)s). Try using the format YYYY-MM-DD.',
307-
{ inputDate: args },
308-
),
300+
throw newTranslatableError(
301+
'We were unable to understand the given date (%(inputDate)s). ' +
302+
'Try using the format YYYY-MM-DD.',
303+
{ inputDate: args },
309304
);
310305
}
311306

@@ -509,10 +504,16 @@ export const Commands = [
509504
useDefaultIdentityServer();
510505
return;
511506
}
512-
throw new Error(_t("Use an identity server to invite by email. Manage in Settings."));
507+
throw newTranslatableError(
508+
"Use an identity server to invite by email. Manage in Settings.",
509+
);
513510
});
514511
} else {
515-
return reject(_t("Use an identity server to invite by email. Manage in Settings."));
512+
return reject(
513+
newTranslatableError(
514+
"Use an identity server to invite by email. Manage in Settings.",
515+
),
516+
);
516517
}
517518
}
518519
const inviter = new MultiInviter(roomId);
@@ -941,30 +942,34 @@ export const Commands = [
941942
return success((async () => {
942943
const device = cli.getStoredDevice(userId, deviceId);
943944
if (!device) {
944-
throw new Error(_t('Unknown (user, session) pair:') + ` (${userId}, ${deviceId})`);
945+
throw newTranslatableError(
946+
'Unknown (user, session) pair: (%(userId)s, %(deviceId)s)',
947+
{ userId, deviceId },
948+
);
945949
}
946950
const deviceTrust = await cli.checkDeviceTrust(userId, deviceId);
947951

948952
if (deviceTrust.isVerified()) {
949953
if (device.getFingerprint() === fingerprint) {
950-
throw new Error(_t('Session already verified!'));
954+
throw newTranslatableError('Session already verified!');
951955
} else {
952-
throw new Error(_t('WARNING: Session already verified, but keys do NOT MATCH!'));
956+
throw newTranslatableError('WARNING: Session already verified, but keys do NOT MATCH!');
953957
}
954958
}
955959

956960
if (device.getFingerprint() !== fingerprint) {
957961
const fprint = device.getFingerprint();
958-
throw new Error(
959-
_t('WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session' +
962+
throw newTranslatableError(
963+
'WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session' +
960964
' %(deviceId)s is "%(fprint)s" which does not match the provided key ' +
961965
'"%(fingerprint)s". This could mean your communications are being intercepted!',
962966
{
963967
fprint,
964968
userId,
965969
deviceId,
966970
fingerprint,
967-
}));
971+
},
972+
);
968973
}
969974

970975
await cli.setDeviceVerified(userId, deviceId, true);
@@ -1083,7 +1088,7 @@ export const Commands = [
10831088
if (isPhoneNumber) {
10841089
const results = await CallHandler.instance.pstnLookup(this.state.value);
10851090
if (!results || results.length === 0 || !results[0].userid) {
1086-
throw new Error("Unable to find Matrix ID for phone number");
1091+
throw newTranslatableError("Unable to find Matrix ID for phone number");
10871092
}
10881093
userId = results[0].userid;
10891094
}

src/components/views/rooms/SendMessageComposer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,9 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
378378
let errText;
379379
if (typeof error === 'string') {
380380
errText = error;
381+
} else if (error.translatedMessage) {
382+
// Check for translatable errors (newTranslatableError)
383+
errText = error.translatedMessage;
381384
} else if (error.message) {
382385
errText = error.message;
383386
} else {

src/languageHandler.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ interface ITranslatableError extends Error {
5151
* @param {string} message Message to translate.
5252
* @returns {Error} The constructed error.
5353
*/
54-
export function newTranslatableError(message: string) {
54+
export function newTranslatableError(message: string, variables?: IVariables): ITranslatableError {
5555
const error = new Error(message) as ITranslatableError;
56-
error.translatedMessage = _t(message);
56+
error.translatedMessage = _t(message, variables);
5757
return error;
5858
}
5959

0 commit comments

Comments
 (0)