diff --git a/nyxx.commander/lib/src/Commander.dart b/nyxx.commander/lib/src/Commander.dart index 1a2d0a51..97f3f66f 100644 --- a/nyxx.commander/lib/src/Commander.dart +++ b/nyxx.commander/lib/src/Commander.dart @@ -57,6 +57,11 @@ class Commander with ICommandRegistrable { AfterHandlerFunction? afterCommandHandler, LoggerHandlerFunction? loggerHandlerFunction, CommandExecutionError? commandExecutionError}) { + if (!PermissionsUtils.isApplied(client.intents, GatewayIntents.allUnprivileged)) { + _logger.shout("Commander cannot start without at least all unprivileged intents"); + exit(1); + } + if (prefix == null && prefixHandler == null) { _logger.shout("Commander cannot start without both prefix and prefixHandler"); exit(1); @@ -89,13 +94,14 @@ class Commander with ICommandRegistrable { } // Find matching command with given message content - final matchingCommand = _commandEntities._findMatchingCommand(event.message.content.replaceFirst(prefix, "").trim().split(" ")) as CommandHandler?; + final messageContentParts = event.message.content.replaceFirst(prefix, "").trim().split(" "); + final matchingCommand = _commandEntities._findMatchingCommand(messageContentParts) as CommandHandler?; if(matchingCommand == null) { return; } - final fullCommandName = matchingCommand.getFullCommandName(); + final fullCommandName = _getFullCommandFromMessage(matchingCommand, messageContentParts); // construct commandcontext final context = CommandContext._new( diff --git a/nyxx.commander/lib/src/utils.dart b/nyxx.commander/lib/src/utils.dart index 561f729a..0eddecde 100644 --- a/nyxx.commander/lib/src/utils.dart +++ b/nyxx.commander/lib/src/utils.dart @@ -1,5 +1,16 @@ part of nyxx_commander; +String _getFullCommandFromMessage(CommandHandler commandHandler, List messageParts) { + var iterator = 1; + + for(var e = commandHandler.parent; e != null; e = e.parent) { + iterator++; + } + + messageParts.removeRange(iterator, messageParts.length); + return messageParts.join(" "); +} + // TODO: FIX. I think that is just awful but is does its job extension _CommandMatcher on Iterable { CommandEntity? _findMatchingCommand(Iterable messageParts) { diff --git a/nyxx/lib/src/ClientOptions.dart b/nyxx/lib/src/ClientOptions.dart index a4eba0de..fa5ab8c7 100644 --- a/nyxx/lib/src/ClientOptions.dart +++ b/nyxx/lib/src/ClientOptions.dart @@ -28,15 +28,6 @@ class ClientOptions { /// The number of messages to cache for each channel. int messageCacheSize; - /// Whether or not to force fetch all of the members the client can see. - /// Can slow down ready times but is recommended if you rely on `Message.member` - /// or the member cache. - bool forceFetchMembers; - - /// Allows to disable member caching on `GUILD_CREATE` event. - /// **It means client will collect members from other events** - bool cacheMembers; - /// Maximum size of guild for which offline member will be sent int largeThreshold; @@ -71,8 +62,6 @@ class ClientOptions { {this.allowedMentions, this.shardCount, this.messageCacheSize = 400, - this.forceFetchMembers = false, - this.cacheMembers = true, this.largeThreshold = 50, this.ignoredEvents = const [], this.compressedGatewayPayloads = true, diff --git a/nyxx/lib/src/core/message/Message.dart b/nyxx/lib/src/core/message/Message.dart index a4dc2ecd..434cf3d1 100644 --- a/nyxx/lib/src/core/message/Message.dart +++ b/nyxx/lib/src/core/message/Message.dart @@ -240,6 +240,7 @@ class GuildMessage extends Message { this.author = Webhook._new(raw["author"] as Map, client); } else { this.author = User._new(client, raw["author"] as Map); + this.client.users[this.author.id] = this.author as User; } if (raw["member"] != null) { diff --git a/nyxx/lib/src/events/MessageEvents.dart b/nyxx/lib/src/events/MessageEvents.dart index 248a629d..b2ab031e 100644 --- a/nyxx/lib/src/events/MessageEvents.dart +++ b/nyxx/lib/src/events/MessageEvents.dart @@ -26,7 +26,7 @@ class MessageDeleteEvent { this.channel = _ChannelCacheable(client, Snowflake(raw["d"]["channel_id"])); this.messageId = Snowflake(raw["d"]["id"]); - final message = channel.getFromCache()?.messageCache[this.messageId]; + this.message = channel.getFromCache()?.messageCache[this.messageId]; } }