nyxx/nyxx.interactions/lib/src/Models/Interaction.dart
2021-03-29 21:17:34 +02:00

73 lines
1.7 KiB
Dart

part of nyxx_interactions;
class Interaction extends SnowflakeEntity implements Disposable {
/// Reference to bot instance
final Nyxx client;
late final int type;
late final Cacheable<Snowflake, Guild> guild;
late final Cacheable<Snowflake, TextChannel> channel;
late final Member author;
late final String token;
late final int version;
late final String name;
late final Map<String, InteractionOption> args;
Interaction._new(
this.client,
Map<String, dynamic> raw,
) : super(Snowflake(raw["id"])) {
this.type = raw["type"] as int;
this.guild = CacheUtility.createCacheableGuild(
client,
Snowflake(
raw["guild_id"],
),
);
this.channel = CacheUtility.createCacheableTextChannel(
client,
Snowflake(
raw["channel_id"],
),
);
this.author = EntityUtility.createGuildMember(
client,
Snowflake(
raw["guild_id"],
),
raw["member"] as Map<String, dynamic>,
);
this.token = raw["token"] as String;
this.version = raw["version"] as int;
this.name = raw["data"]["name"] as String;
this.args = _generateArgs(raw["data"] as Map<String, dynamic>);
}
Map<String, InteractionOption> _generateArgs(Map<String, dynamic> rawData) {
final args = <String, InteractionOption>{};
if (rawData["options"] != null) {
final l = rawData["options"] as List;
for (var i = 0; i < l.length; i++) {
final el = l[i];
args[el["name"] as String] = InteractionOption._new(
el["value"] as dynamic,
(el["options"] ?? List<dynamic>.empty()) as List,
);
}
}
return args;
}
@override
Future<void> dispose() => Future.value(null);
}