82
82
83
83
__all__ = (
84
84
'Client' ,
85
+ 'ClientFeatures' ,
85
86
)
86
87
87
88
@@ -99,6 +100,30 @@ def __getattr__(self, attr: str) -> None:
99
100
_loop : Any = _LoopSentinel ()
100
101
101
102
103
+ class ClientFeatures :
104
+ """Opt-in or out of Guilded or guilded.py features.
105
+
106
+ All parameters are optional.
107
+
108
+ Parameters
109
+ -----------
110
+ experimental_event_style: :class:`bool`
111
+ Enables a more simplified event handling interface.
112
+ Read more about this `here <https://www.guilded.gg/guilded-api/blog/updates/Event-style-experiment>`_.
113
+ official_markdown: :class:`bool`
114
+ Enables new (2024) markdown support for requests made by the client
115
+ as well as events received.
116
+ """
117
+ def __init__ (
118
+ self ,
119
+ * ,
120
+ experimental_event_style : bool = False ,
121
+ official_markdown : bool = False ,
122
+ ) -> None :
123
+ self .experimental_event_style = experimental_event_style
124
+ self .official_markdown = official_markdown
125
+
126
+
102
127
class Client :
103
128
"""The basic client class for interfacing with Guilded.
104
129
@@ -109,6 +134,8 @@ class Client:
109
134
max_messages: Optional[:class:`int`]
110
135
The maximum number of messages to store in the internal message cache.
111
136
This defaults to ``1000``. Passing in ``None`` disables the message cache.
137
+ features: Optional[:class:`.ClientFeatures`]
138
+ Client features to opt in or out of.
112
139
113
140
Attributes
114
141
-----------
@@ -123,20 +150,29 @@ class Client:
123
150
max_messages: Optional[:class:`int`]
124
151
The maximum number of messages to store in the internal message cache.
125
152
This defaults to ``1000``. Passing in ``None`` disables the message cache.
153
+ features: :class:`.ClientFeatures`
154
+ The features that are enabled or disabled for the client.
126
155
"""
127
156
128
157
def __init__ (
129
158
self ,
130
159
* ,
131
160
internal_server_id : Optional [str ] = None ,
132
161
max_messages : Optional [int ] = MISSING ,
162
+ features : Optional [ClientFeatures ] = None ,
133
163
** options ,
134
164
):
135
165
# internal
136
166
self .loop : asyncio .AbstractEventLoop = _loop
137
167
self .max_messages : int = 1000 if max_messages is MISSING else max_messages
138
168
self ._listeners = {}
139
169
170
+ self .features = features or ClientFeatures ()
171
+ # This option is deprecated
172
+ if options .get ('experimental_event_style' ) is not None :
173
+ log .info ("The `experimental_event_style` client parameter is deprecated, please switch to using ClientFeatures instead." )
174
+ self .features .experimental_event_style = options .pop ('experimental_event_style' , False )
175
+
140
176
# state
141
177
self ._closed : bool = False
142
178
self ._ready : asyncio .Event = MISSING
@@ -145,7 +181,7 @@ def __init__(
145
181
self .ws : Optional [GuildedWebSocket ] = None
146
182
self .http : HTTPClient = HTTPClient (
147
183
max_messages = self .max_messages ,
148
- experimental_event_style = options . pop ( 'experimental_event_style' , False ) ,
184
+ features = self . features ,
149
185
)
150
186
151
187
async def __aenter__ (self ) -> Self :
0 commit comments