nyxx/nyxx.interactions/lib/src/Models/Interaction.dart

73 lines
1.7 KiB
Dart
Raw Normal View History

2020-12-20 17:09:44 +01:00
part of nyxx_interactions;
class Interaction extends SnowflakeEntity implements Disposable {
/// Reference to bot instance
final Nyxx client;
late final int type;
2020-12-20 17:09:44 +01:00
late final Cacheable<Snowflake, Guild> guild;
2020-12-20 17:09:44 +01:00
2020-12-22 12:33:28 +01:00
late final Cacheable<Snowflake, TextChannel> channel;
2020-12-20 17:09:44 +01:00
late final Member author;
2020-12-20 17:09:44 +01:00
late final String token;
late final int version;
2021-02-10 17:29:42 +01:00
late final String name;
2021-02-10 17:29:42 +01:00
late final Map<String, InteractionOption> args;
2020-12-20 17:09:44 +01:00
Interaction._new(
2021-02-10 17:29:42 +01:00
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"],
),
);
2020-12-22 12:33:28 +01:00
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>{};
2021-02-10 17:29:42 +01:00
if (rawData["options"] != null) {
final l = rawData["options"] as List;
2021-02-10 17:29:42 +01:00
for (var i = 0; i < l.length; i++) {
final el = l[i];
args[el["name"] as String] = InteractionOption._new(
el["value"] as dynamic,
2021-02-10 17:29:42 +01:00
(el["options"] ?? List<dynamic>.empty()) as List,
);
}
}
return args;
2020-12-20 17:09:44 +01:00
}
@override
Future<void> dispose() => Future.value(null);
2021-02-10 17:29:42 +01:00
}