Skip to content

Commit ca233ed

Browse files
committed
Permission changes and changes to the rest api procs. (Draft commit)
1 parent 7a28f86 commit ca233ed

File tree

12 files changed

+320
-150
lines changed

12 files changed

+320
-150
lines changed

dimscord/constants.nim

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,17 @@ type
140140
ufDiscordCertifiedModerator,
141141
ufBotHttpInteractions
142142
ufActiveDeveloper = 22
143-
GuildMemberFlags* = enum
144-
gmfDidRejoin
145-
gmfCompletedOnboarding
146-
gmfBypassesVerification
147-
gmfStartedOnboarding
143+
MemberFlags* = enum
144+
mfDidRejoin,
145+
mfCompletedOnboarding,
146+
mfBypassesVerification,
147+
mfStartedOnboarding,
148+
mfIsGuest,
149+
mfStartedHomeActions,
150+
mfCompletedHomeActions,
151+
mfAutomodQuarantinedUsername = 7,
152+
mfDmSettingsUpsellAcknowledged = 9,
153+
mfAutomodQuarantinedGuildTag
148154
SystemChannelFlags* = enum
149155
scfSuppressJoinNotifications,
150156
scfSuppressPremiumSubscriptions,
@@ -376,6 +382,9 @@ type
376382
aleOnboardingUpdate = 167
377383
aleHomeSettingsCreate = 190
378384
aleHomeSettingsUpdate = 191
385+
OverwriteType* = enum
386+
otRole = 0
387+
otMember = 1
379388
TeamMembershipState* = enum
380389
tmsInvited = 1 # not to be confused with "The Mysterious Song" lol
381390
tmsAccepted = 2
@@ -513,7 +522,8 @@ type
513522
rrwSaturday = 5
514523
rrwSunday = 6
515524
RecurrenceRuleMonth* = enum
516-
rrmJanuary = 1,
525+
rrmNone = 0
526+
rrmJanuary = 1
517527
rrmFebruary = 2
518528
rrmMarch = 3
519529
rrmApril = 4
@@ -565,6 +575,7 @@ type
565575
etPremiumPurchase,
566576
etApplicationSubscription
567577
SkuType* = enum
578+
stNone = 0 # this is so useless
568579
stDurable = 2
569580
stConsumable = 3
570581
stSubscription = 5
@@ -650,7 +661,7 @@ const
650661
permAddReactions,
651662
permViewChannel,
652663
permSendMessages,
653-
permSendTTSMessage,
664+
permSendTtsMessage,
654665
permManageMessages,
655666
permEmbedLinks,
656667
permAttachFiles,
@@ -673,7 +684,7 @@ const
673684
permUseExternalStickers,
674685
permUseExternalEmojis,
675686
permReadMessageHistory,
676-
permSendTTSMessage,
687+
permSendTtsMessage,
677688
permAddReactions,
678689
permManageWebhooks,
679690
permUseSlashCommands,
@@ -685,7 +696,7 @@ const
685696
permVoiceMuteMembers,
686697
permVoiceDeafenMembers,
687698
permVoiceMoveMembers,
688-
permUseVAD,
699+
permUseVad,
689700
permUseSoundboard,
690701
permUseExternalSounds,
691702
permStartEmbeddedActivities,
@@ -700,7 +711,7 @@ const
700711
permReadMessageHistory,
701712
permAddReactions,
702713
permManageChannels,
703-
permSendTTSMessage,
714+
permSendTtsMessage,
704715
permViewChannel,
705716
permVoiceConnect,
706717
permVoiceMuteMembers,
@@ -742,13 +753,6 @@ proc log*(msg: string) =
742753
when defined(dimscordDebug):
743754
echo "[Lib]: " & msg
744755

745-
proc `$`*(p:PermissionFlags): string=
746-
if p==permMentionEveryone:
747-
return "Mention @everyone, @here and All Roles"
748-
system.`$`(p)[4..^1].findandcaptureall(
749-
re"(^[a-z]|[A-Z]+)[a-z]*"
750-
).join" "
751-
752756
# CDN Endpoints
753757

754758
proc cdnGuilds(gid=""): string =
@@ -905,6 +909,9 @@ proc endpointGuildVanity*(gid: string): string =
905909
proc endpointGuildOnboarding*(gid: string): string =
906910
endpointGuilds(gid) & "/onboarding"
907911

912+
proc endpointGuildSounds*(gid: string; sid = ""): string =
913+
endpointGuilds(gid) & "/soundboard-sounds" & (if sid != "":"/"&sid else:"")
914+
908915
proc endpointGuildChannels*(gid: string; cid = ""): string =
909916
endpointGuilds(gid) & "/channels" & (if cid != "":"/"&cid else:"")
910917

dimscord/dispatch.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ proc messageReactionAdd(s: Shard, data: JsonNode) {.async.} =
227227
emoji: emoji,
228228
kind: some ReactionType data["type"].getInt,
229229
reacted: data["user_id"].str == s.user.id,
230-
burst: data["burst"].getBool,
230+
burst: data{"burst"}.getBool,
231231
)
232232
exists = false
233233

@@ -283,7 +283,7 @@ proc messageReactionRemove(s: Shard, data: JsonNode) {.async.} =
283283
reaction = Reaction(
284284
emoji: emoji,
285285
kind: some data["type"].getInt.ReactionType,
286-
burst: data["burst"].getBool
286+
burst: data{"burst"}.getBool
287287
)
288288
exists = false
289289

dimscord/helpers.nim

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,14 @@ proc timestamp*(id: string): Time =
177177
let snowflake = parseBiggestUint(id)
178178
result = fromUnix int64(((snowflake shr 22) + 1420070400000'u64) div 1000)
179179

180+
proc toBits*(p: set[PermissionFlags]): int =
181+
## Converts the set of permissions to an integer
182+
cast[int](p)
183+
184+
proc denied*(p: set[PermissionFlags]): set[PermissionFlags] =
185+
## Returns the denied permissions
186+
permAll - p
187+
180188
proc perms*(p: PermObj): int =
181189
## Gets the total permissions.
182190
result = 0
@@ -598,7 +606,7 @@ template waitFor*(discord: DiscordClient; event: static[DispatchEvent],
598606
##
599607
## - The object returned would be a tuple that have the same parameter names in `Events`.
600608
## e.g. if you were to `waitFor` `MessageReactionAdd`, it would be
601-
## `tuple[s: Shard, msg: Message, u: User, emj: Emoji, exists: bool]`
609+
## `tuple[msg: Message, u: User, emj: Emoji, exists: bool]`
602610
## You can always find which type the parameter fields are by checking the `Events` object.
603611
##
604612
## See also:

dimscord/helpers/user.nim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ template followup*(i: Interaction;
183183
template editResponse*(i: Interaction;
184184
content = none string;
185185
embeds = newSeq[Embed]();
186+
flags: set[MessageFlags] = {};
186187
allowed_mentions = none AllowedMentions;
187188
attachments = newSeq[Attachment]();
188189
files = newSeq[DiscordFile]();
@@ -195,9 +196,8 @@ template editResponse*(i: Interaction;
195196
## - `message_id` can be `@original`
196197
getClient.api.editInteractionResponse(
197198
i.application_id, i.token, message_id,
198-
content, embeds, allowed_mentions,
199-
attachments, files,
200-
components
199+
content, embeds, flags, allowed_mentions,
200+
attachments, files, components
201201
)
202202

203203
template getResponse*(i: Interaction, message_id = "@original"): Future[Message] =

dimscord/objects.nim

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,10 @@ proc parseHook*(s: string, i: var int, v: var set[UserFlags]) =
218218
parseHook(s, i, number)
219219
v = cast[set[UserFlags]](number)
220220

221-
proc parseHook*(s: string, i: var int, v: var set[GuildMemberFlags]) =
221+
proc parseHook*(s: string, i: var int, v: var set[MemberFlags]) =
222222
var number: BiggestInt
223223
parseHook(s, i, number)
224-
v = cast[set[GuildMemberFlags]](number)
224+
v = cast[set[MemberFlags]](number)
225225

226226
proc parseHook*(s: string, i: var int, v: var set[RoleFlags]) =
227227
var number: BiggestInt
@@ -281,6 +281,16 @@ proc newRole*(data: JsonNode): Role =
281281
"available_for_purchase" in tag)
282282
result.tags.get.guild_connections = some "guild_connections" in tag
283283

284+
proc parseHook*(s: string, i: var int, v: var OverwriteType) =
285+
var data: JsonNode
286+
parseHook(s, i, data)
287+
case data.kind:
288+
of JString: # audit log options
289+
v = OverwriteType parseInt(data.str)
290+
of JInt:
291+
v = OverwriteType data.getInt
292+
else: discard
293+
284294
proc newHook(m: var Member) =
285295
m = Member()
286296
m.presence = Presence(
@@ -481,7 +491,6 @@ proc `[]=`(obj: ref object, fld: string, val: JsonNode) =
481491
for name, field in obj[].fieldPairs:
482492
if name == fld:
483493
field = ($val).fromJson(typeof(field))
484-
485494

486495
proc newAuditLogChangeValue(data: JsonNode, key: string): AuditLogChangeValue =
487496
case data.kind:
@@ -574,10 +583,6 @@ proc newAuditLog*(data: JsonNode): AuditLog =
574583
proc newVoiceState*(data: JsonNode): VoiceState =
575584
result = ($data).fromJson(VoiceState)
576585

577-
proc renameHook(v: var Guild, fieldName: var string) {.used.} =
578-
if fieldName == "region":
579-
fieldName = "rtc_region"
580-
581586
proc parseHook(s: string, i: var int, v: var set[SystemChannelFlags]) =
582587
var number: BiggestInt
583588
parseHook(s, i, number)
@@ -799,8 +804,8 @@ proc parseHook(s: string, n: var int, a: var ApplicationCommandInteractionData)
799804

800805
if "component_type" in data:
801806
a = ApplicationCommandInteractionData(
802-
interactionType: idtMessageComponent,
803-
component_type: ($data["component_type"].getInt).fromJson(
807+
interaction_type: idtMessageComponent,
808+
component_type: ($data["component_type"]).fromJson(
804809
MessageComponentType),
805810
custom_id: data["custom_id"].str
806811
)
@@ -825,20 +830,20 @@ proc parseHook(s: string, n: var int, a: var ApplicationCommandInteractionData)
825830
case key:
826831
of "users":
827832
for k, v in values.pairs:
828-
a.resolved.users[k] = ($v).fromJson User
833+
a.resolved.users[k] = v.newUser
829834
of "attachments":
830835
for k, v in values.pairs:
831-
a.resolved.attachments[k] = ($v).fromJson Attachment
836+
a.resolved.attachments[k] = v.newAttachment
832837
else: discard
833838

834839
if a.kind == atUser:
835840
case key:
836841
of "members":
837842
for k, v in values.pairs:
838-
a.resolved.members[k] = ($v).fromJson Member
843+
a.resolved.members[k] = v.newMember
839844
of "roles":
840845
for k, v in values.pairs:
841-
a.resolved.roles[k] = ($v).fromJson Role
846+
a.resolved.roles[k] = v.newRole
842847
else: discard
843848

844849
if a.kind == atMessage:
@@ -850,7 +855,7 @@ proc parseHook(s: string, n: var int, a: var ApplicationCommandInteractionData)
850855
)
851856
of "messages":
852857
for k, v in values.pairs:
853-
a.resolved.messages[k] = ($v).fromJson Message
858+
a.resolved.messages[k] = v.newMessage
854859
else: discard
855860

856861
for k, val in data.pairs:
@@ -1002,7 +1007,6 @@ proc `+`(a, b: JsonNode): JsonNode =
10021007
for k, v in b.pairs:
10031008
result[k] = v
10041009

1005-
10061010
proc `&=`(a: var JsonNode, b: JsonNode) =
10071011
a = a+b
10081012

dimscord/objects/macros.nim

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,15 @@ macro loadOpt*(obj: typed, lits: varargs[untyped]): untyped =
5353
let fieldName = lit.strVal
5454
result.add quote do:
5555
if `lit`.isSome:
56-
`obj`[`fieldName`] = %*get(`lit`)
56+
var value = %*get(`lit`)
57+
when `lit` is Option[int]:
58+
if `lit`.get == -1: value = newJNull()
59+
when `lit` is Option[string]:
60+
if `lit`.get == "": value = newJNull()
61+
when `lit` is Option[enum]:
62+
value = %*(ord get(`lit`))
63+
64+
`obj`[`fieldName`] = value
5765

5866
macro loadOpts*(res, parent: typed, lits: varargs[untyped]): untyped =
5967
result = newStmtList()

0 commit comments

Comments
 (0)