diff --git a/evennia/accounts/bots.py b/evennia/accounts/bots.py index 65ca1b650f..e593daaa71 100644 --- a/evennia/accounts/bots.py +++ b/evennia/accounts/bots.py @@ -649,6 +649,10 @@ class DiscordBot(Bot): """ super().msg(nickname=(new_nickname, guild_id, user_id)) + def assign_role(self, role_id, guild_id, user_id, **kwargs): + + pass + def direct_msg(self, message, sender, **kwargs): """ Called when the Discord bot receives a direct message on Discord. diff --git a/evennia/server/portal/discord.py b/evennia/server/portal/discord.py index 751057f375..b7df76e037 100644 --- a/evennia/server/portal/discord.py +++ b/evennia/server/portal/discord.py @@ -352,9 +352,19 @@ class DiscordClient(WebSocketClientProtocol, _BASE_SESSION_CLASS): """ url = f"{DISCORD_API_BASE_URL}/{url}" body = FileBodyProducer(BytesIO(json.dumps(data).encode("utf-8"))) - is_patch_request = kwargs.pop('patch', False) + is_patch_request = kwargs.pop("patch", False) + is_put_request = kwargs.pop("put", False) + request_type = "POST" + + if is_patch_request: + request_type = b"PATCH" + elif is_put_request: + request_type = b"PUT" + else: + request_type = b"POST" + d = _AGENT.request( - b"PATCH" if is_patch_request else b"POST", + request_type, url.encode("utf-8"), Headers( { @@ -371,6 +381,9 @@ class DiscordClient(WebSocketClientProtocol, _BASE_SESSION_CLASS): d = readBody(response) d.addCallback(self.post_response) return d + elif response.code == 204: + d = readBody(response) + d.addCallback(self.post_response) elif should_retry(response.code): delay(300, self._post_json, url, data, **kwargs) @@ -499,6 +512,11 @@ class DiscordClient(WebSocketClientProtocol, _BASE_SESSION_CLASS): data.update(kwargs) self._post_json(f"guilds/{guild_id}/members/{user_id}", data, patch=True) + def send_role(self, role_id, guild_id, user_id, **kwargs): + + data = kwargs + self._post_json(f"guilds/{guild_id}/members/{user_id}/roles/{role_id}", put=True) + def send_default(self, *args, **kwargs): """ Ignore other outputfuncs