|
| 1 | +import 'package:discord_api/src/models/discord_overwrite.dart'; |
| 2 | +import 'package:discord_api/src/models/discord_snowflake.dart'; |
| 3 | +import 'package:discord_api/src/models/discord_thread_member.dart'; |
| 4 | +import 'package:discord_api/src/models/discord_thread_metadata.dart'; |
| 5 | +import 'package:discord_api/src/models/discord_user.dart'; |
| 6 | +import 'package:discord_api/src/models/discord_video_quality_mode.dart'; |
| 7 | + |
| 8 | +import 'discord_channel_type.dart'; |
| 9 | + |
| 10 | +class DiscordChannel { |
| 11 | + final DiscordSnowflake id; |
| 12 | + final int type; |
| 13 | + late final DiscordChannelType? _typeAsEnum; |
| 14 | + final DiscordSnowflake? guildId; |
| 15 | + final int? position; |
| 16 | + final List<DiscordOverwrite>? permissionOverwrites; |
| 17 | + final String? name; |
| 18 | + final String? topic; |
| 19 | + final bool? nsfw; |
| 20 | + final DiscordSnowflake? lastMessageId; |
| 21 | + final int? bitrate; |
| 22 | + final int? userLimit; |
| 23 | + final int? rateLimitPerUser; |
| 24 | + final List<DiscordUser>? recipients; |
| 25 | + final String? icon; |
| 26 | + final DiscordSnowflake? ownerId; |
| 27 | + final DiscordSnowflake? parentId; |
| 28 | + final String? lastPinTimestamp; |
| 29 | + late final DateTime? _lastPinTimestampAsDateTime; |
| 30 | + final String? rtcRegion; // Id of a voice region |
| 31 | + final int? videoQualityMode; |
| 32 | + late final DiscordVideoQualityMode? _videoQualityModeAsEnum; |
| 33 | + final int? messageCount; // approximative + caps at 50 |
| 34 | + final int? memberCount; // approximative + caps at 50 |
| 35 | + final DiscordThreadMetadata? threadMetadata; |
| 36 | + final DiscordThreadMember? member; |
| 37 | + final int? defaultAutoArchiveDuration; |
| 38 | + final String? permissions; |
| 39 | + |
| 40 | + static const idEntry = 'id'; |
| 41 | + static const typeEntry = 'type'; |
| 42 | + static const guildIdEntry = 'guild_id'; |
| 43 | + static const positionEntry = 'position'; |
| 44 | + static const permissionOverwritesEntry = 'permission_overwrites'; |
| 45 | + static const nameEntry = 'name'; |
| 46 | + static const topicEntry = 'topic'; |
| 47 | + static const nsfwEntry = 'nsfw'; |
| 48 | + static const lastMessageIdEntry = 'last_message_id'; |
| 49 | + static const bitrateEntry = 'bitrate'; |
| 50 | + static const userLimitEntry = 'user_limit'; |
| 51 | + static const rateLimitPerUserEntry = 'rate_limit_per_user'; |
| 52 | + static const recipientsEntry = 'recipients'; |
| 53 | + static const iconEntry = 'icon'; |
| 54 | + static const ownerIdEntry = 'owner_id'; |
| 55 | + static const parentIdEntry = 'parent_id'; |
| 56 | + static const lastPinTimestampEntry = 'last_pin_timestamp'; |
| 57 | + static const rtcRegionEntry = 'rtc_region'; |
| 58 | + static const videoQualityModeEntry = 'video_quality_mode'; |
| 59 | + static const messageCountEntry = 'message_count'; |
| 60 | + static const memberCountEntry = 'member_count'; |
| 61 | + static const threadMetadataEntry = 'thread_metadata'; |
| 62 | + static const memberEntry = 'member'; |
| 63 | + static const defaultAutoArchiveDurationEntry = |
| 64 | + 'default_auto_archive_duration'; |
| 65 | + static const permissionsEntry = 'permissions'; |
| 66 | + |
| 67 | + DiscordChannel({ |
| 68 | + required this.id, |
| 69 | + required this.type, |
| 70 | + this.guildId, |
| 71 | + this.position, |
| 72 | + this.permissionOverwrites, |
| 73 | + this.name, |
| 74 | + this.topic, |
| 75 | + this.nsfw, |
| 76 | + this.lastMessageId, |
| 77 | + this.bitrate, |
| 78 | + this.userLimit, |
| 79 | + this.rateLimitPerUser, |
| 80 | + this.recipients, |
| 81 | + this.icon, |
| 82 | + this.ownerId, |
| 83 | + this.parentId, |
| 84 | + this.lastPinTimestamp, |
| 85 | + this.rtcRegion, |
| 86 | + this.videoQualityMode, |
| 87 | + this.messageCount, |
| 88 | + this.memberCount, |
| 89 | + this.threadMetadata, |
| 90 | + this.member, |
| 91 | + this.defaultAutoArchiveDuration, |
| 92 | + this.permissions, |
| 93 | + }); |
| 94 | + |
| 95 | + DateTime? get lastPinTimestampAsDateTime { |
| 96 | + if (lastPinTimestamp == null) return null; |
| 97 | + _lastPinTimestampAsDateTime ??= DateTime.parse(lastPinTimestamp!); |
| 98 | + return _lastPinTimestampAsDateTime; |
| 99 | + } |
| 100 | + |
| 101 | + DiscordVideoQualityMode? get videoQualityModeAsEnum { |
| 102 | + if (videoQualityMode == null) return null; |
| 103 | + _videoQualityModeAsEnum ??= |
| 104 | + DiscordVideoQualityMode.values[videoQualityMode!]; |
| 105 | + } |
| 106 | + |
| 107 | + factory DiscordChannel.fromJson(Map<String, dynamic> json) => DiscordChannel( |
| 108 | + id: DiscordSnowflake(json[idEntry]), |
| 109 | + type: json[typeEntry] as int, |
| 110 | + guildId: json[guildIdEntry] != null |
| 111 | + ? DiscordSnowflake(json[guildIdEntry]) |
| 112 | + : null, |
| 113 | + position: json[positionEntry] as int?, |
| 114 | + permissionOverwrites: json[permissionOverwritesEntry] != null |
| 115 | + ? List<DiscordOverwrite>.from( |
| 116 | + json[permissionOverwritesEntry]!.map(DiscordOverwrite.fromJson)) |
| 117 | + : null, |
| 118 | + name: json[nameEntry] as String?, |
| 119 | + topic: json[topicEntry] as String?, |
| 120 | + nsfw: json[nsfwEntry] as bool?, |
| 121 | + lastMessageId: json[lastMessageIdEntry] != null |
| 122 | + ? DiscordSnowflake(json[lastMessageIdEntry]) |
| 123 | + : null, |
| 124 | + bitrate: json[bitrateEntry] as int?, |
| 125 | + userLimit: json[userLimitEntry] as int?, |
| 126 | + rateLimitPerUser: json[rateLimitPerUserEntry] as int?, |
| 127 | + recipients: json[recipientsEntry] != null |
| 128 | + ? List<DiscordUser>.from( |
| 129 | + json[recipientsEntry]!.map(DiscordUser.fromJson)) |
| 130 | + : null, |
| 131 | + icon: json[iconEntry] as String?, |
| 132 | + ownerId: json[ownerIdEntry] != null |
| 133 | + ? DiscordSnowflake(json[ownerIdEntry]) |
| 134 | + : null, |
| 135 | + parentId: json[parentIdEntry] != null |
| 136 | + ? DiscordSnowflake(json[parentIdEntry]) |
| 137 | + : null, |
| 138 | + lastPinTimestamp: json[lastPinTimestampEntry] as String?, |
| 139 | + rtcRegion: json[rtcRegionEntry] as String?, |
| 140 | + videoQualityMode: json[videoQualityModeEntry] as int?, |
| 141 | + messageCount: json[messageCountEntry] as int?, |
| 142 | + memberCount: json[memberCountEntry] as int?, |
| 143 | + threadMetadata: json[threadMetadataEntry] != null |
| 144 | + ? DiscordThreadMetadata.fromJson(json[threadMetadataEntry]) |
| 145 | + : null, |
| 146 | + member: json[memberEntry] != null |
| 147 | + ? DiscordThreadMember.fromJson(json[memberEntry]) |
| 148 | + : null, |
| 149 | + defaultAutoArchiveDuration: |
| 150 | + json[defaultAutoArchiveDurationEntry] as int?, |
| 151 | + permissions: json[permissionsEntry] as String?, |
| 152 | + ); |
| 153 | +} |
0 commit comments