diff options
Diffstat (limited to 'ExampleBots/ModerationBot/Commands/JoinSpaceMembersCommand.cs')
-rw-r--r-- | ExampleBots/ModerationBot/Commands/JoinSpaceMembersCommand.cs | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/ExampleBots/ModerationBot/Commands/JoinSpaceMembersCommand.cs b/ExampleBots/ModerationBot/Commands/JoinSpaceMembersCommand.cs deleted file mode 100644 index 6564e71..0000000 --- a/ExampleBots/ModerationBot/Commands/JoinSpaceMembersCommand.cs +++ /dev/null @@ -1,73 +0,0 @@ -using ArcaneLibs.Extensions; -using LibMatrix.EventTypes.Spec; -using LibMatrix.Helpers; -using LibMatrix.RoomTypes; -using LibMatrix.Services; -using LibMatrix.Utilities.Bot.Interfaces; -using ModerationBot.AccountData; - -namespace ModerationBot.Commands; - -public class JoinSpaceMembersCommand(IServiceProvider services, HomeserverProviderService hsProvider, HomeserverResolverService hsResolver, PolicyEngine engine) : ICommand { - public string Name { get; } = "joinspacemembers"; - public string Description { get; } = "Join all rooms in space"; - private GenericRoom logRoom { get; set; } - - public async Task<bool> CanInvoke(CommandContext ctx) { - //check if user is admin in control room - var botData = await ctx.Homeserver.GetAccountDataAsync<BotData>("gay.rory.moderation_bot_data"); - var controlRoom = ctx.Homeserver.GetRoom(botData.ControlRoom); - var isAdmin = (await controlRoom.GetPowerLevelsAsync())!.UserHasStatePermission(ctx.MessageEvent.Sender, "m.room.ban"); - if (!isAdmin) { - // await ctx.Reply("You do not have permission to use this command!"); - await ctx.Homeserver.GetRoom(botData.LogRoom!).SendMessageEventAsync( - new RoomMessageEventContent(body: $"User {ctx.MessageEvent.Sender} tried to use command {Name} but does not have permission!", messageType: "m.text")); - } - - return isAdmin; - } - - public async Task Invoke(CommandContext ctx) { - var botData = await ctx.Homeserver.GetAccountDataAsync<BotData>("gay.rory.moderation_bot_data"); - logRoom = ctx.Homeserver.GetRoom(botData.LogRoom ?? botData.ControlRoom); - var currentRooms = (await ctx.Homeserver.GetJoinedRooms()).Select(x=>x.RoomId).ToList(); - - await logRoom.SendMessageEventAsync(MessageFormatter.FormatSuccess($"Joining space children of {ctx.Args[0]} with reason: {string.Join(' ', ctx.Args[1..])}")); - var roomId = ctx.Args[0]; - var servers = new List<string>() { ctx.Homeserver.ServerName }; - if (roomId.StartsWith('[')) { - - } - - if (roomId.StartsWith('#')) { - var res = await ctx.Homeserver.ResolveRoomAliasAsync(roomId); - roomId = res.RoomId; - servers.AddRange(servers); - } - - var room = ctx.Homeserver.GetRoom(roomId); - var tasks = new List<Task<bool>>(); - await foreach (var memberRoom in room.AsSpace.GetChildrenAsync()) { - if (currentRooms.Contains(memberRoom.RoomId)) continue; - servers.Add(room.RoomId.Split(':', 2)[1]); - servers = servers.Distinct().ToList(); - tasks.Add(JoinRoom(memberRoom, string.Join(' ', ctx.Args[1..]), servers)); - } - - await foreach (var b in tasks.ToAsyncEnumerable()) { - await Task.Delay(50); - } - } - - private async Task<bool> JoinRoom(GenericRoom memberRoom, string reason, List<string> servers) { - try { - var resp = await memberRoom.JoinAsync(servers.ToArray(), reason, checkIfAlreadyMember: false); - await logRoom.SendMessageEventAsync(MessageFormatter.FormatSuccess($"Joined room {memberRoom.RoomId} (resp={resp.RoomId})")); - } - catch (Exception e) { - await logRoom.SendMessageEventAsync(MessageFormatter.FormatException($"Failed to join {memberRoom.RoomId}", e)); - } - - return true; - } -} |