&& room.currentState.hasSufficientPowerLevelFor('kick', myPowerLevel)
&& powerLevel < myPowerLevel
);
+ const canIBan = (
+ ['join', 'leave'].includes(roomMember?.membership)
+ && room.currentState.hasSufficientPowerLevelFor('ban', myPowerLevel)
+ && powerLevel < myPowerLevel
+ );
const handleKick = (e) => {
e.preventDefault();
roomActions.kick(roomId, userId, kickReason !== '' ? kickReason : undefined);
};
+ const handleBan = (e) => {
+ e.preventDefault();
+ const banReason = e.target.elements['ban-reason']?.value.trim();
+ roomActions.ban(roomId, userId, banReason !== '' ? banReason : undefined);
+ };
+
return (
<div className="moderation-tools">
{canIKick && (
- <>
- <form onSubmit={handleKick}>
- <Input label="Kick reason" name="kick-reason" />
- <Button type="submit">Kick</Button>
- </form>
- </>
+ <form onSubmit={handleKick}>
+ <Input label="Kick reason" name="kick-reason" />
+ <Button type="submit">Kick</Button>
+ </form>
+ )}
+ {canIBan && (
+ <form onSubmit={handleBan}>
+ <Input label="Ban reason" name="ban-reason" />
+ <Button type="submit">Ban</Button>
+ </form>
)}
</div>
);
return result;
}
+async function ban(roomId, userId, reason) {
+ const mx = initMatrix.matrixClient;
+
+ const result = await mx.ban(roomId, userId, reason);
+ return result;
+}
+
async function setPowerLevel(roomId, userId, powerLevel) {
const mx = initMatrix.matrixClient;
const room = mx.getRoom(roomId);
export {
join, leave,
- create, invite, kick,
+ create, invite, kick, ban,
setPowerLevel,
createSpaceShortcut, deleteSpaceShortcut,
};