Warn if the bot cannot send a message in the widget (#852)

* Add a warning when the room does not have permission to post messages.

* Update warning

* changelog
This commit is contained in:
Will Hunt 2023-12-07 10:28:16 +00:00 committed by GitHub
parent 911c2254b2
commit 95738ed844
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 2 deletions

1
changelog.d/852.feature Normal file
View File

@ -0,0 +1 @@
Warn if the bot does not have permissions to talk in a room.

View File

@ -176,9 +176,13 @@ export class BridgeWidgetApi extends ProvisioningApi {
// If we have a service filter. // If we have a service filter.
.filter(c => typeof serviceFilter !== "string" || c?.service === serviceFilter) as GetConnectionsResponseItem[]; .filter(c => typeof serviceFilter !== "string" || c?.service === serviceFilter) as GetConnectionsResponseItem[];
const userPl = powerlevel.content.users?.[req.userId] || powerlevel.defaultUserLevel; const userPl = powerlevel.content.users?.[req.userId] || powerlevel.defaultUserLevel;
const botPl = powerlevel.content.users?.[botUser.userId] || powerlevel.defaultUserLevel;
for (const c of connections) { for (const c of connections) {
const requiredPl = Math.max(powerlevel.content.events?.[c.type] || 0, powerlevel.defaultStateEventLevel); // TODO: What about crypto?
c.canEdit = userPl >= requiredPl; const requiredPlForEdit = Math.max(powerlevel.content.events?.[c.type] ?? 0, powerlevel.defaultStateEventLevel);
const requiredPlForMessages = Math.max(powerlevel.content.events?.["m.room.message"] ?? powerlevel.content.events_default ?? 0);
c.canEdit = userPl >= requiredPlForEdit;
c.canSendMessages = botPl >= requiredPlForMessages;
if (!c.canEdit) { if (!c.canEdit) {
delete c.secrets; delete c.secrets;
} }

View File

@ -18,6 +18,7 @@ export interface GetConnectionsResponseItem<Config = object, Secrets = object> e
id: string; id: string;
config: Config; config: Config;
secrets?: Secrets; secrets?: Secrets;
canSendMessages?: boolean;
canEdit?: boolean; canEdit?: boolean;
warning?: ConnectionWarning; warning?: ConnectionWarning;
} }

View File

@ -96,6 +96,8 @@ export const RoomConfig = function<SConfig, ConnectionType extends GetConnection
const [ toMigrate, setToMigrate ] = useState<ConnectionType[]>([]); const [ toMigrate, setToMigrate ] = useState<ConnectionType[]>([]);
const canSendMessages = connections?.every(c => c.canSendMessages) ?? true;
useEffect(() => { useEffect(() => {
// produce `toMigrate` composed of `migrationCandidates` with anything already in `connections` filtered out // produce `toMigrate` composed of `migrationCandidates` with anything already in `connections` filtered out
// use `migrationComparator` to determine duplicates // use `migrationComparator` to determine duplicates
@ -164,6 +166,12 @@ export const RoomConfig = function<SConfig, ConnectionType extends GetConnection
<h1>{text.header}</h1> <h1>{text.header}</h1>
</header> </header>
} }
{ !canSendMessages && canEditRoom &&
<WarningPane header={"Misconfigured permissions"}>
This room does not permit the bot to send messages.
Please go to the room settings in your client and adjust permissions.
</WarningPane>
}
{ canEditRoom && <section> { canEditRoom && <section>
<h2>{text.createNew}</h2> <h2>{text.createNew}</h2>
{serviceConfig && <ConnectionConfigComponent {serviceConfig && <ConnectionConfigComponent