Skip to content

Commit d5eecce

Browse files
committed
Add support for members that aren't members of the clan chat
Fixes #275 I don't think this bug can ever affect groups
1 parent ea5de73 commit d5eecce

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

steam/chat.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from ._const import UNIX_EPOCH
1818
from .abc import Channel, Message, PartialUser
1919
from .app import PartialApp
20-
from .enums import ChatMemberRank, Type
20+
from .enums import ChatMemberJoinState, ChatMemberRank, Type
2121
from .errors import WSException
2222
from .id import _ID64_TO_ID32, ID
2323
from .models import Avatar
@@ -57,6 +57,7 @@ class _PartialMemberProto(
5757
"clan",
5858
"group",
5959
"rank",
60+
"join_state",
6061
"kick_expires_at",
6162
"_role_ids",
6263
"_state",
@@ -66,13 +67,15 @@ class _PartialMemberProto(
6667

6768
_state: ConnectionState
6869
rank: ChatMemberRank
70+
join_state: ChatMemberJoinState
6971
_role_ids: tuple[RoleID, ...]
7072
kick_expires_at: datetime
7173
clan: Clan | None
7274
group: Group | None
7375

7476
def _update(self, member: chat.Member, /) -> None:
7577
self.rank = ChatMemberRank.try_value(member.rank)
78+
self.join_state = ChatMemberJoinState.try_value(member.state)
7679
self._role_ids = cast("tuple[RoleID, ...]", tuple(member.role_ids))
7780
self.kick_expires_at = DateTime.from_timestamp(member.time_kick_expire)
7881

@@ -146,7 +149,7 @@ def copy(self) -> Self:
146149
self.group,
147150
chat.Member(
148151
self.id,
149-
chat.EChatRoomJoinState.Joined,
152+
self.join_state, # type: ignore
150153
self.rank, # type: ignore
151154
int(self.kick_expires_at.timestamp()),
152155
list(self._role_ids),

steam/clan.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
from .enums import ClanAccountFlags, EventType, Language, Type, UserNewsType
2323
from .event import Announcement, Event
2424
from .id import ID, parse_id64
25+
from .protobufs import chat
2526
from .types.id import ID32, ID64, Intable
2627
from .utils import BBCodeStr, DateTime, parse_bb_code
2728

2829
if TYPE_CHECKING:
2930
from collections.abc import AsyncGenerator, Sequence
3031

31-
from .protobufs import chat
3232
from .state import ConnectionState
3333
from .types.http import IPAdress
3434
from .user import User
@@ -430,7 +430,8 @@ def _get_partial_member(self, id: ID32, /) -> PartialMember:
430430
try:
431431
return PartialMember(self._state, clan=self, member=self._partial_members[id])
432432
except KeyError:
433-
return PartialMember(self._state, clan=self, member=self._partial_members[id])
433+
member = self._partial_members[id] = chat.Member(id, state=chat.EChatRoomJoinState.NONE)
434+
return PartialMember(self._state, clan=self, member=member)
434435

435436
def is_ogg(self) -> bool:
436437
"""Whether this clan is an official game group."""

steam/enums.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"CommunityVisibilityState",
3434
"TradeOfferState",
3535
"ChatMemberRank",
36+
"ChatMemberJoinState",
3637
"ChatEntryType",
3738
"ClanAccountFlags",
3839
"UIMode",
@@ -1209,6 +1210,12 @@ class ChatMemberRank(IntEnum):
12091210
Owner = 50
12101211
"""Owner rank for a chat member."""
12111212

1213+
class ChatMemberJoinState(IntEnum):
1214+
"""The join state of a chat member."""
1215+
Default = 0
1216+
NONE = 1
1217+
Joined = 2
1218+
12121219

12131220
class ChatEntryType(IntEnum):
12141221
"""The type of chat entry."""

0 commit comments

Comments
 (0)