Skip to content

Commit da990b5

Browse files
committed
fix message updates, guild members update and bit of voice state update fixing
1 parent 85515f5 commit da990b5

File tree

2 files changed

+23
-71
lines changed

2 files changed

+23
-71
lines changed

dimscord/dispatch.nim

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ proc voiceStateUpdate(s: Shard, data: JsonNode) {.async.} =
8181
let voiceState = newVoiceState(data)
8282
var oldVoiceState: Option[VoiceState]
8383
if guild.id in s.cache.guilds and voiceState.user_id in guild.members:
84-
guild.members[voiceState.user_id].voice_state = some voiceState
84+
let member = guild.members[voiceState.user_id]
85+
member.voice_state = some voiceState
86+
member.mute = voiceState.mute
87+
member.deaf = voiceState.deaf
8588

8689
if guild.voice_states.hasKeyOrPut(voiceState.user_id, voiceState):
8790
if voiceState.channel_id.isSome:
@@ -422,8 +425,7 @@ proc messageUpdate(s: Shard, data: JsonNode) {.async.} =
422425
oldMessage = some move chan.messages[msg.id]
423426
exists = true
424427

425-
msg = msg.updateMessage(data)
426-
if msg.id in chan.messages: chan.messages[msg.id] = msg
428+
msg = data.newMessage
427429
elif msg.channel_id in s.cache.dmChannels:
428430
let chan = s.cache.dmChannels[msg.channel_id]
429431

@@ -432,8 +434,7 @@ proc messageUpdate(s: Shard, data: JsonNode) {.async.} =
432434
oldMessage = some move chan.messages[msg.id]
433435
exists = true
434436

435-
msg = msg.updateMessage(data)
436-
if msg.id in chan.messages: chan.messages[msg.id] = msg
437+
msg = data.newMessage
437438

438439
s.checkAndCall(MessageUpdate, msg, oldMessage, exists)
439440

@@ -569,39 +570,30 @@ proc guildMemberUpdate(s: Shard, data: JsonNode) {.async.} =
569570
Guild(id: data["guild_id"].str)
570571
)
571572

572-
member = guild.members.getOrDefault(data["user"]["id"].str, Member(
573-
user: User(
574-
id: data["user"]["id"].str
575-
)
576-
))
577-
573+
var member = data.newMember
578574
var oldMember: Option[Member]
579575

580-
if member.user.id in guild.members:
581-
oldMember = some move guild.members[member.user.id]
582-
583-
guild.members[member.user.id] = member
584-
585-
member.user = newUser(data["user"])
586-
587576
if s.cache.preferences.cache_users and member.user.id notin s.cache.users:
588577
s.cache.users[member.user.id] = member.user
589578

590-
if "nick" in data and data["nick"].kind != JNull:
591-
member.nick = some data["nick"].str
592-
if "premium_since" in data and data["premium_since"].kind != JNull:
593-
member.premium_since = some data["premium_since"].str
579+
if member.user.id in guild.members:
580+
oldMember = some move guild.members[member.user.id]
594581

595-
member.roles = @[]
596-
for role in data["roles"].elems:
597-
member.roles.add(role.str)
582+
if "mute" notin data:
583+
member.mute = oldMember.get.mute
584+
if "deaf" notin data:
585+
member.deaf = oldMember.get.deaf
586+
if "flags" notin data:
587+
member.flags = oldMember.get.flags
588+
if "permissions" notin data:
589+
member.permissions = oldMember.get.permissions
590+
member.presence = oldMember.get.presence
591+
member.voice_state = oldMember.get.voice_state
592+
# these are the ones that should be kept unchanged and not defaulted
593+
# I noticed that the raw json data includes the stuff that we need to know
594+
# but doesnt include the stuff that we may already know e.g. mute/deaf
598595

599-
if "flags" in data and data["flags"].kind != JNull:
600-
member.flags = cast[set[GuildMemberFlags]](data["flags"].getInt)
601-
if "avatar_decoration_data" in data and data["avatar_decoration_data"].kind!=JNull:
602-
member.avatar_decoration_data=($data["avatar_decoration_data"]).fromJson(
603-
typeof(member.avatar_decoration_data)
604-
)
596+
guild.members[member.user.id] = member
605597

606598
s.checkAndCall(GuildMemberUpdate, guild, member, oldMember)
607599

dimscord/objects.nim

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -681,46 +681,6 @@ proc newGuildPreview*(data: JsonNode): GuildPreview =
681681
proc newInviteMetadata*(data: JsonNode): InviteMetadata =
682682
result = data.`$`.fromJson(InviteMetadata)
683683

684-
proc updateMessage*(m: Message, data: JsonNode): Message =
685-
result = m
686-
687-
with result:
688-
mention_users = data{"mentions"}.getElems.map(newUser)
689-
attachments = data{"attachments"}.getElems.map(newAttachment)
690-
embeds = data{"embeds"}.getElems.mapIt(it.`$`.fromJson(Embed))
691-
if result.referenced_message.isSome and "referenced_message" in data:
692-
result.referenced_message = some data["referenced_message"].newMessage
693-
if result.messageReference.isSome:
694-
if "message_reference"in data and data["message_reference"].kind!=JNull:
695-
result.message_reference = some ($data{"message_reference"}).fromJson(
696-
MessageReference
697-
)
698-
699-
with data:
700-
keyCheckStr(result, content, timestamp)
701-
keyCheckOptStr(result, edited_timestamp, guild_id, nonce)
702-
keyCheckBool(result, mention_everyone, pinned, tts)
703-
704-
if "type" in data and data["type"].kind != JNull:
705-
if MessageType(data["type"].getInt) in fullSet(MessageType):
706-
result.kind = MessageType data["type"].getInt
707-
else:
708-
result.kind = mtDefault
709-
710-
if "flags" in data and data["flags"].kind != JNull:
711-
result.flags = cast[set[MessageFlags]](data["flags"].getInt)
712-
if "author" in data:
713-
result.author = data["author"].newUser
714-
if "activity" in data:
715-
let activity = data["activity"]
716-
717-
result.activity = some (
718-
kind: activity["type"].getInt,
719-
party_id: activity{"party_id"}.getStr
720-
)
721-
if "application" in data:
722-
result.application = some data["application"].newApplication
723-
724684
proc newSticker*(data: JsonNode): Sticker =
725685
result = ($data).fromJson(Sticker)
726686

0 commit comments

Comments
 (0)