Repository: hikari-py/hikari
Pull request #1102 (2022-03-25 21:19:29)

Bugfix/webhook major param
### Summary
<!-- Small summary of the merge request -->

### Checklist
<!-- Make sure to tick all the following boxes by putting an `x` in between (like this `[x]`) -->
- [ ] I have run `nox` and all the pipelines have passed.
- [ ] I have made unittests according to the code I have added/modified/deleted.

### Related issues
<!--
To mention an issue use `#issue-id` and to mention a merge request use `!merge-request-id`
To close/fix an issue use `Close #issue-id` or `Fix #issue-id` (depending on the merge request)
-->



Patch:
diff --git a/changes/1092.breaking.md b/changes/1092.breaking.md
new file mode 100644
index 00000000..7622641d
--- /dev/null
+++ b/changes/1092.breaking.md
@@ -0,0 +1,1 @@
+Remove store sku related application fields and store channels.
diff --git a/changes/1095.deprecation.md b/changes/1095.deprecation.md
new file mode 100644
index 00000000..628859f8
--- /dev/null
+++ b/changes/1095.deprecation.md
@@ -0,0 +1,1 @@
+Renamed `nick` argument to `nickname` for edit member and add user to guild REST methods.
diff --git a/changes/1102.bugfix.md b/changes/1102.bugfix.md
new file mode 100644
index 00000000..d535cee3
--- /dev/null
+++ b/changes/1102.bugfix.md
@@ -0,0 +1,1 @@
+Take the major param for webhook without token endpoints when handling bucket ratelimits.
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 016446f0..5351df18 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -7,7 +7,7 @@ mock==4.0.3
 
 # Py.test stuff.
 pytest==7.1.1
-pytest-asyncio==0.18.2
+pytest-asyncio==0.18.3
 pytest-cov==3.0.0
 pytest-randomly==3.11.0
 
@@ -28,7 +28,7 @@ sphobjinv==2.2.2
 # TYPE CHECKING #
 #################
 
-mypy==0.941
+mypy==0.942
 pyright==1.1.231
 
 #######################
diff --git a/hikari/api/entity_factory.py b/hikari/api/entity_factory.py
index 8d127524..d49dffad 100644
--- a/hikari/api/entity_factory.py
+++ b/hikari/api/entity_factory.py
@@ -447,42 +447,6 @@ def deserialize_guild_news_channel(
             `"guild_id"` is not present in the passed payload.
         """
 
-    @abc.abstractmethod
-    def deserialize_guild_store_channel(
-        self,
-        payload: data_binding.JSONObject,
-        *,
-        guild_id: undefined.UndefinedOr[snowflakes.Snowflake] = undefined.UNDEFINED,
-    ) -> channel_models.GuildStoreChannel:
-        """Parse a raw payload from Discord into a guild store channel object.
-
-        Parameters
-        ----------
-        payload : hikari.internal.data_binding.JSONObject
-            The JSON payload to deserialize.
-
-        Other Parameters
-        ----------------
-        guild_id : hikari.snowflakes.Snowflake
-            The ID of the guild this channel belongs to. If passed then this
-            will be prioritised over `"guild_id"` in the payload.
-
-        !!! note
-            `guild_id` currently only covers the gateway GUILD_CREATE event
-            where `"guild_id"` is not included in the channel's payload.
-
-        Returns
-        -------
-        hikari.channels.GuildStoreChannel
-            The deserialized guild store channel object.
-
-        Raises
-        ------
-        builtins.KeyError
-            If `guild_id` is left as `hikari.undefined.UNDEFINED` when
-            `"guild_id"` is not present in the passed payload.
-        """
-
     @abc.abstractmethod
     def deserialize_guild_voice_channel(
         self,
diff --git a/hikari/api/rest.py b/hikari/api/rest.py
index 867a11e5..3502e1e8 100644
--- a/hikari/api/rest.py
+++ b/hikari/api/rest.py
@@ -3253,6 +3253,7 @@ async def add_user_to_guild(
         guild: snowflakes.SnowflakeishOr[guilds.PartialGuild],
         user: snowflakes.SnowflakeishOr[users.PartialUser],
         *,
+        nickname: undefined.UndefinedOr[str] = undefined.UNDEFINED,
         nick: undefined.UndefinedOr[str] = undefined.UNDEFINED,
         roles: undefined.UndefinedOr[snowflakes.SnowflakeishSequence[guilds.PartialRole]] = undefined.UNDEFINED,
         mute: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
@@ -3279,10 +3280,12 @@ async def add_user_to_guild(
 
         Other Parameters
         ----------------
-        nick : hikari.undefined.UndefinedOr[builtins.str]
+        nickname : hikari.undefined.UndefinedOr[builtins.str]
             If provided, the nick to add to the user when he joins the guild.
 
             Requires the `MANAGE_NICKNAMES` permission on the guild.
+        nick : hikari.undefined.UndefinedOr[builtins.str]
+            Deprecated alias for `nickname`.
         roles : hikari.undefined.UndefinedOr[hikari.snowflakes.SnowflakeishSequence[hikari.guilds.PartialRole]]
             If provided, the roles to add to the user when he joins the guild.
             This may be a collection objects or IDs of existing roles.
@@ -4972,6 +4975,7 @@ async def edit_member(
         guild: snowflakes.SnowflakeishOr[guilds.PartialGuild],
         user: snowflakes.SnowflakeishOr[users.PartialUser],
         *,
+        nickname: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         nick: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         roles: undefined.UndefinedOr[snowflakes.SnowflakeishSequence[guilds.PartialRole]] = undefined.UNDEFINED,
         mute: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
@@ -4995,11 +4999,13 @@ async def edit_member(
 
         Other Parameters
         ----------------
-        nick : hikari.undefined.UndefinedNoneOr[builtins.str]
+        nickname : hikari.undefined.UndefinedNoneOr[builtins.str]
             If provided, the new nick for the member. If `builtins.None`,
             will remove the members nick.
 
             Requires the `MANAGE_NICKNAMES` permission.
+        nick : hikari.undefined.UndefinedOr[builtins.str]
+            Deprecated alias for `nickname`.
         roles : hikari.undefined.UndefinedOr[hikari.snowflakes.SnowflakeishSequence[hikari.guilds.PartialRole]]
             If provided, the new roles for the member.
 
diff --git a/hikari/applications.py b/hikari/applications.py
index e082cf50..69cb9b29 100644
--- a/hikari/applications.py
+++ b/hikari/applications.py
@@ -487,14 +487,14 @@ class InviteApplication(guilds.PartialApplication):
     """The client application that models may use for procedures."""
 
     cover_image_hash: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
-    """The CDN's hash of this application's cover image, used in the store or for embedded games."""
+    """The CDN's hash of this application's default rich presence invite cover image."""
 
     public_key: bytes = attr.field(eq=False, hash=False, repr=False)
     """The key used for verifying interaction and GameSDK payload signatures."""
 
     @property
     def cover_image_url(self) -> typing.Optional[files.URL]:
-        """Cover image URL used in the store or for embedded games.
+        """Rich presence cover image URL for this application, if set.
 
         Returns
         -------
@@ -504,7 +504,7 @@ def cover_image_url(self) -> typing.Optional[files.URL]:
         return self.make_cover_image_url()
 
     def make_cover_image_url(self, *, ext: str = "png", size: int = 4096) -> typing.Optional[files.URL]:
-        """Generate the cover image URL used in the store or for embedded games, if set.
+        """Generate the rich presence cover image URL for this application, if set.
 
         Parameters
         ----------
@@ -572,20 +572,8 @@ class Application(guilds.PartialApplication):
     If the application is not part of a team, this will be `builtins.None`.
     """
 
-    guild_id: typing.Optional[snowflakes.Snowflake] = attr.field(eq=False, hash=False, repr=False)
-    """The ID of the guild this application is linked to if sold on Discord."""
-
-    primary_sku_id: typing.Optional[snowflakes.Snowflake] = attr.field(eq=False, hash=False, repr=False)
-    """The ID of the primary "Game SKU" of a game that's sold on Discord."""
-
-    slug: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
-    """The URL "slug" that is used to point to this application's store page.
-
-    Only applicable to applications sold on Discord.
-    """
-
     cover_image_hash: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
-    """The CDN's hash of this application's cover image, used in the store or for embedded games."""
+    """The CDN's hash of this application's default rich presence invite cover image."""
 
     terms_of_service_url: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
     """The URL of this application's terms of service."""
@@ -595,7 +583,7 @@ class Application(guilds.PartialApplication):
 
     @property
     def cover_image_url(self) -> typing.Optional[files.URL]:
-        """Cover image URL used in the store or for embedded games.
+        """Rich presence cover image URL for this application, if set.
 
         Returns
         -------
@@ -605,7 +593,7 @@ def cover_image_url(self) -> typing.Optional[files.URL]:
         return self.make_cover_image_url()
 
     def make_cover_image_url(self, *, ext: str = "png", size: int = 4096) -> typing.Optional[files.URL]:
-        """Generate the cover image URL used in the store or for embedded games, if set.
+        """Generate the rich presence cover image URL for this application, if set.
 
         Parameters
         ----------
@@ -638,76 +626,6 @@ def make_cover_image_url(self, *, ext: str = "png", size: int = 4096) -> typing.
             file_format=ext,
         )
 
-    async def fetch_guild(self) -> typing.Optional[guilds.RESTGuild]:
-        """Fetch the guild this application is linked to if sold on Discord.
-
-        Returns
-        -------
-        typing.Optional[hikari.guilds.RESTGuild]
-            The requested guild if the application is linked to a guild, else `builtins.None`.
-
-        Raises
-        ------
-        hikari.errors.ForbiddenError
-            If you are not part of the guild.
-        hikari.errors.NotFoundError
-            If the guild is not found.
-        hikari.errors.UnauthorizedError
-            If you are unauthorized to make the request (invalid/missing token).
-        hikari.errors.RateLimitTooLongError
-            Raised in the event that a rate limit occurs that is
-            longer than `max_rate_limit` when making a request.
-        hikari.errors.RateLimitedError
-            Usually, Hikari will handle and retry on hitting
-            rate-limits automatically. This includes most bucket-specific
-            rate-limits and global rate-limits. In some rare edge cases,
-            however, Discord implements other undocumented rules for
-            rate-limiting, such as limits per attribute. These cannot be
-            detected or handled normally by Hikari due to their undocumented
-            nature, and will trigger this exception if they occur.
-        hikari.errors.InternalServerError
-            If an internal error occurs on Discord while handling the request.
-        """
-        if self.guild_id is not None:
-            return await self.app.rest.fetch_guild(self.guild_id)
-        return None
-
-    async def fetch_guild_preview(self) -> typing.Optional[guilds.GuildPreview]:
-        """Fetch the preview of the guild this application is linked to if sold on Discord.
-
-        Returns
-        -------
-        typing.Optional[hikari.guilds.GuildPreview]
-            The requested guild preview if the application is linked to a guild, else `builtins.None`.
-
-        !!! note
-            This will only work if you are a part of that guild or it is public.
-
-        Raises
-        ------
-        hikari.errors.NotFoundError
-            If the guild is not found or you are not part of the guild.
-        hikari.errors.UnauthorizedError
-            If you are unauthorized to make the request (invalid/missing token).
-        hikari.errors.RateLimitTooLongError
-            Raised in the event that a rate limit occurs that is
-            longer than `max_rate_limit` when making a request.
-        hikari.errors.RateLimitedError
-            Usually, Hikari will handle and retry on hitting
-            rate-limits automatically. This includes most bucket-specific
-            rate-limits and global rate-limits. In some rare edge cases,
-            however, Discord implements other undocumented rules for
-            rate-limiting, such as limits per attribute. These cannot be
-            detected or handled normally by Hikari due to their undocumented
-            nature, and will trigger this exception if they occur.
-        hikari.errors.InternalServerError
-            If an internal error occurs on Discord while handling the request.
-        """
-        if self.guild_id is not None:
-            return await self.app.rest.fetch_guild_preview(self.guild_id)
-
-        return None
-
 
 @attr_extensions.with_copy
 @attr.define(hash=True, kw_only=True, weakref_slot=False)
diff --git a/hikari/channels.py b/hikari/channels.py
index f0aa4f00..238f9fe2 100644
--- a/hikari/channels.py
+++ b/hikari/channels.py
@@ -40,7 +40,6 @@
     "GuildChannel",
     "GuildTextChannel",
     "GuildNewsChannel",
-    "GuildStoreChannel",
     "GuildVoiceChannel",
     "GuildStageChannel",
     "WebhookChannelT",
@@ -97,9 +96,6 @@ class ChannelType(int, enums.Enum):
     GUILD_NEWS = 5
     """A channel that can be followed and can crosspost."""
 
-    GUILD_STORE = 6
-    """A channel that show's a game's store page."""
-
     GUILD_STAGE = 13
     """A few to many voice channel for hosting events."""
 
@@ -1291,16 +1287,6 @@ class GuildNewsChannel(TextableGuildChannel):
     """
 
 
-@attr.define(hash=True, kw_only=True, weakref_slot=False)
-class GuildStoreChannel(GuildChannel):
-    """Represents a store channel.
-
-    These were originally used to sell games when Discord had a game store. This
-    was scrapped at the end of 2019, so these may disappear from the platform
-    eventually.
-    """
-
-
 @attr.define(hash=True, kw_only=True, weakref_slot=False)
 class GuildVoiceChannel(GuildChannel):
     """Represents a voice channel."""
diff --git a/hikari/guilds.py b/hikari/guilds.py
index c1427102..0bdfc89b 100644
--- a/hikari/guilds.py
+++ b/hikari/guilds.py
@@ -66,6 +66,7 @@
 from hikari import urls
 from hikari import users
 from hikari.internal import attr_extensions
+from hikari.internal import deprecation
 from hikari.internal import enums
 from hikari.internal import routes
 from hikari.internal import time
@@ -921,6 +922,7 @@ async def remove_role(
     async def edit(
         self,
         *,
+        nickname: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         nick: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         roles: undefined.UndefinedOr[snowflakes.SnowflakeishSequence[PartialRole]] = undefined.UNDEFINED,
         mute: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
@@ -935,11 +937,13 @@ async def edit(
 
         Other Parameters
         ----------------
-        nick : hikari.undefined.UndefinedNoneOr[builtins.str]
+        nickname : hikari.undefined.UndefinedNoneOr[builtins.str]
             If provided, the new nick for the member. If `builtins.None`,
             will remove the members nick.
 
             Requires the `MANAGE_NICKNAMES` permission.
+        nick : hikari.undefined.UndefinedNoneOr[builtins.str]
+            Deprecated alias for `nickname`.
         roles : hikari.undefined.UndefinedOr[hikari.snowflakes.SnowflakeishSequence[hikari.guilds.PartialRole]]
             If provided, the new roles for the member.
 
@@ -1003,10 +1007,14 @@ async def edit(
         hikari.errors.InternalServerError
             If an internal error occurs on Discord while handling the request.
         """
+        if nick is not undefined.UNDEFINED:
+            deprecation.warn_deprecated("nick", alternative="nickname")
+            nickname = nick
+
         return await self.user.app.rest.edit_member(
             self.guild_id,
             self.user.id,
-            nick=nick,
+            nickname=nickname,
             roles=roles,
             mute=mute,
             deaf=deaf,
@@ -1222,9 +1230,6 @@ class PartialApplication(snowflakes.Unique):
     icon_hash: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
     """The CDN hash of this application's icon, if set."""
 
-    summary: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
-    """This summary for this application's primary SKU if it's sold on Discord, if any."""
-
     def __str__(self) -> str:
         return self.name
 
diff --git a/hikari/impl/entity_factory.py b/hikari/impl/entity_factory.py
index 858ffe5f..628e8c28 100644
--- a/hikari/impl/entity_factory.py
+++ b/hikari/impl/entity_factory.py
@@ -274,7 +274,6 @@ def __init__(self, app: traits.RESTAware) -> None:
             channel_models.ChannelType.GUILD_CATEGORY: self.deserialize_guild_category,
             channel_models.ChannelType.GUILD_TEXT: self.deserialize_guild_text_channel,
             channel_models.ChannelType.GUILD_NEWS: self.deserialize_guild_news_channel,
-            channel_models.ChannelType.GUILD_STORE: self.deserialize_guild_store_channel,
             channel_models.ChannelType.GUILD_VOICE: self.deserialize_guild_voice_channel,
             channel_models.ChannelType.GUILD_STAGE: self.deserialize_guild_stage_channel,
         }
@@ -351,7 +350,6 @@ def deserialize_application(self, payload: data_binding.JSONObject) -> applicati
                 owner_id=snowflakes.Snowflake(team_payload["owner_user_id"]),
             )
 
-        primary_sku_id = snowflakes.Snowflake(payload["primary_sku_id"]) if "primary_sku_id" in payload else None
         return application_models.Application(
             app=self._app,
             id=snowflakes.Snowflake(payload["id"]),
@@ -361,14 +359,10 @@ def deserialize_application(self, payload: data_binding.JSONObject) -> applicati
             is_bot_code_grant_required=payload["bot_require_code_grant"],
             owner=self.deserialize_user(payload["owner"]),
             rpc_origins=payload.get("rpc_origins"),
-            summary=payload["summary"] or None,
             public_key=bytes.fromhex(payload["verify_key"]),
             flags=application_models.ApplicationFlags(payload["flags"]),
             icon_hash=payload.get("icon"),
             team=team,
-            guild_id=snowflakes.Snowflake(payload["guild_id"]) if "guild_id" in payload else None,
-            primary_sku_id=primary_sku_id,
-            slug=payload.get("slug"),
             cover_image_hash=payload.get("cover_image"),
             privacy_policy_url=payload.get("privacy_policy_url"),
             terms_of_service_url=payload.get("terms_of_service_url"),
@@ -383,7 +377,6 @@ def deserialize_authorization_information(
             name=application_payload["name"],
             description=application_payload["description"] or None,
             icon_hash=application_payload.get("icon"),
-            summary=application_payload["summary"] or None,
             is_bot_public=application_payload.get("bot_public"),
             is_bot_code_grant_required=application_payload.get("bot_require_code_grant"),
             public_key=bytes.fromhex(application_payload["verify_key"]),
@@ -768,25 +761,6 @@ def deserialize_guild_news_channel(
             last_pin_timestamp=last_pin_timestamp,
         )
 
-    def deserialize_guild_store_channel(
-        self,
-        payload: data_binding.JSONObject,
-        *,
-        guild_id: undefined.UndefinedOr[snowflakes.Snowflake] = undefined.UNDEFINED,
-    ) -> channel_models.GuildStoreChannel:
-        channel_fields = self._set_guild_channel_attributes(payload, guild_id=guild_id)
-        return channel_models.GuildStoreChannel(
-            app=self._app,
-            id=channel_fields.id,
-            name=channel_fields.name,
-            type=channel_fields.type,
-            guild_id=channel_fields.guild_id,
-            position=channel_fields.position,
-            permission_overwrites=channel_fields.permission_overwrites,
-            is_nsfw=channel_fields.is_nsfw,
-            parent_id=channel_fields.parent_id,
-        )
-
     def deserialize_guild_voice_channel(
         self,
         payload: data_binding.JSONObject,
@@ -1310,7 +1284,6 @@ def deserialize_integration(
                 id=snowflakes.Snowflake(raw_application["id"]),
                 name=raw_application["name"],
                 icon_hash=raw_application["icon"],
-                summary=raw_application["summary"] or None,
                 description=raw_application["description"] or None,
                 bot=bot,
             )
@@ -1607,7 +1580,6 @@ def _set_invite_attributes(self, payload: data_binding.JSONObject) -> _InviteFie
                 id=snowflakes.Snowflake(invite_payload["id"]),
                 name=invite_payload["name"],
                 description=invite_payload["description"] or None,
-                summary=invite_payload["summary"] or None,
                 public_key=bytes.fromhex(invite_payload["verify_key"]),
                 icon_hash=invite_payload.get("icon"),
                 cover_image_hash=invite_payload.get("cover_image"),
@@ -1993,7 +1965,7 @@ def deserialize_command_interaction(
             id=snowflakes.Snowflake(payload["id"]),
             type=base_interactions.InteractionType(payload["type"]),
             guild_id=guild_id,
-            guild_locale=locales.Locale(payload.get("guild_locale", "en-US")),
+            guild_locale=locales.Locale(payload["guild_locale"]) if "guild_locale" in payload else None,
             locale=locales.Locale(payload["locale"]),
             channel_id=snowflakes.Snowflake(payload["channel_id"]),
             member=member,
@@ -2051,7 +2023,7 @@ def deserialize_autocomplete_interaction(
             options=options,
             resolved=resolved,
             locale=locales.Locale(payload["locale"]),
-            guild_locale=locales.Locale(payload.get("guild_locale")),
+            guild_locale=locales.Locale(payload["guild_locale"]) if "guild_locale" in payload else None,
         )
 
     def deserialize_interaction(self, payload: data_binding.JSONObject) -> base_interactions.PartialInteraction:
@@ -2126,7 +2098,7 @@ def deserialize_component_interaction(
             component_type=message_models.ComponentType(data_payload["component_type"]),
             message=self.deserialize_message(payload["message"]),
             locale=locales.Locale(payload["locale"]),
-            guild_locale=locales.Locale(payload.get("guild_locale")),
+            guild_locale=locales.Locale(payload["guild_locale"]) if "guild_locale" in payload else None,
         )
 
     ##################
@@ -2250,18 +2222,12 @@ def _deserialize_message_activity(self, payload: data_binding.JSONObject) -> mes
         )
 
     def _deserialize_message_application(self, payload: data_binding.JSONObject) -> message_models.MessageApplication:
-        primary_sku_id: typing.Optional[snowflakes.Snowflake] = None
-        if (raw_primary_sku_id := payload.get("primary_sku_id")) is not None:
-            primary_sku_id = snowflakes.Snowflake(raw_primary_sku_id)
-
         return message_models.MessageApplication(
             id=snowflakes.Snowflake(payload["id"]),
             name=payload["name"],
             description=payload["description"] or None,
             icon_hash=payload["icon"],
-            summary=payload["summary"] or None,
             cover_image_hash=payload.get("cover_image"),
-            primary_sku_id=primary_sku_id,
         )
 
     def _deserialize_message_attachment(self, payload: data_binding.JSONObject) -> message_models.Attachment:
@@ -2921,7 +2887,7 @@ def deserialize_my_user(self, payload: data_binding.JSONObject) -> user_models.O
             is_bot=user_fields.is_bot,
             is_system=user_fields.is_system,
             is_mfa_enabled=payload["mfa_enabled"],
-            locale=locales.Locale(payload["locale"]),
+            locale=locales.Locale(payload["locale"]) if "locale" in payload else None,
             is_verified=payload.get("verified"),
             email=payload.get("email"),
             flags=user_models.UserFlag(payload["flags"]),
diff --git a/hikari/impl/rest.py b/hikari/impl/rest.py
index 1054094b..b3421104 100644
--- a/hikari/impl/rest.py
+++ b/hikari/impl/rest.py
@@ -2053,15 +2053,20 @@ async def add_user_to_guild(
         guild: snowflakes.SnowflakeishOr[guilds.PartialGuild],
         user: snowflakes.SnowflakeishOr[users.PartialUser],
         *,
+        nickname: undefined.UndefinedOr[str] = undefined.UNDEFINED,
         nick: undefined.UndefinedOr[str] = undefined.UNDEFINED,
         roles: undefined.UndefinedOr[snowflakes.SnowflakeishSequence[guilds.PartialRole]] = undefined.UNDEFINED,
         mute: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
         deaf: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
     ) -> typing.Optional[guilds.Member]:
+        if nick is not undefined.UNDEFINED:
+            deprecation.warn_deprecated("nick", alternative="nickname")
+            nickname = nick
+
         route = routes.PUT_GUILD_MEMBER.compile(guild=guild, user=user)
         body = data_binding.JSONObjectBuilder()
         body.put("access_token", str(access_token))
-        body.put("nick", nick)
+        body.put("nick", nickname)
         body.put("mute", mute)
         body.put("deaf", deaf)
         body.put_snowflake_array("roles", roles)
@@ -2627,6 +2632,7 @@ async def edit_member(
         guild: snowflakes.SnowflakeishOr[guilds.PartialGuild],
         user: snowflakes.SnowflakeishOr[users.PartialUser],
         *,
+        nickname: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         nick: undefined.UndefinedNoneOr[str] = undefined.UNDEFINED,
         roles: undefined.UndefinedOr[snowflakes.SnowflakeishSequence[guilds.PartialRole]] = undefined.UNDEFINED,
         mute: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
@@ -2637,9 +2643,13 @@ async def edit_member(
         communication_disabled_until: undefined.UndefinedNoneOr[datetime.datetime] = undefined.UNDEFINED,
         reason: undefined.UndefinedOr[str] = undefined.UNDEFINED,
     ) -> guilds.Member:
+        if nick is not undefined.UNDEFINED:
+            deprecation.warn_deprecated("nick", alternative="nickname")
+            nickname = nick
+
         route = routes.PATCH_GUILD_MEMBER.compile(guild=guild, user=user)
         body = data_binding.JSONObjectBuilder()
-        body.put("nick", nick)
+        body.put("nick", nickname)
         body.put("mute", mute)
         body.put("deaf", deaf)
         body.put_snowflake_array("roles", roles)
diff --git a/hikari/interactions/command_interactions.py b/hikari/interactions/command_interactions.py
index 01ae6094..53182fa0 100644
--- a/hikari/interactions/command_interactions.py
+++ b/hikari/interactions/command_interactions.py
@@ -171,10 +171,7 @@ class AutocompleteInteractionOption(CommandInteractionOption):
 @attr_extensions.with_copy
 @attr.define(hash=True, kw_only=True, weakref_slot=False)
 class BaseCommandInteraction(base_interactions.PartialInteraction):
-    """Represents a base command interaction on Discord.
-
-    May be a command interaction or an autocomplete interaction.
-    """
+    """Represents a base command interaction on Discord."""
 
     channel_id: snowflakes.Snowflake = attr.field(eq=False, hash=False, repr=True)
     """ID of the channel this command interaction event was triggered in."""
diff --git a/hikari/internal/routes.py b/hikari/internal/routes.py
index 804d22a0..9ddb221e 100644
--- a/hikari/internal/routes.py
+++ b/hikari/internal/routes.py
@@ -43,6 +43,7 @@
     frozenset(("channel",)): lambda d: d["channel"],
     frozenset(("guild",)): lambda d: d["guild"],
     frozenset(("webhook", "token")): lambda d: d["webhook"] + ":" + d["token"],
+    frozenset(("webhook",)): lambda d: d["webhook"],
 }
 
 
diff --git a/hikari/messages.py b/hikari/messages.py
index 835dcb79..9e4692a5 100644
--- a/hikari/messages.py
+++ b/hikari/messages.py
@@ -425,14 +425,11 @@ class MessageApplication(guilds.PartialApplication):
     """The representation of an application used in messages."""
 
     cover_image_hash: typing.Optional[str] = attr.field(eq=False, hash=False, repr=False)
-    """The CDN's hash of this application's cover image, used on the store."""
-
-    primary_sku_id: typing.Optional[snowflakes.Snowflake] = attr.field(eq=False, hash=False, repr=False)
-    """The ID of the primary "Game SKU" of a game that's sold on Discord."""
+    """The CDN's hash of this application's default rich presence invite cover image."""
 
     @property
     def cover_image_url(self) -> typing.Optional[files.URL]:
-        """Cover image URL used on the store.
+        """Rich presence cover image URL for this application, if set.
 
         Returns
         -------
@@ -442,7 +439,7 @@ def cover_image_url(self) -> typing.Optional[files.URL]:
         return self.make_cover_image_url()
 
     def make_cover_image_url(self, *, ext: str = "png", size: int = 4096) -> typing.Optional[files.URL]:
-        """Generate the cover image URL used in the store, if set.
+        """Generate the rich presence cover image URL for this application, if set.
 
         Parameters
         ----------
diff --git a/hikari/users.py b/hikari/users.py
index f8d9d2ca..92bc21e7 100644
--- a/hikari/users.py
+++ b/hikari/users.py
@@ -758,7 +758,10 @@ class OwnUser(UserImpl):
     """Whether the user's account has multi-factor authentication enabled."""
 
     locale: typing.Optional[typing.Union[str, locales.Locale]] = attr.field(eq=False, hash=False, repr=False)
-    """The user's set language. This is not provided by the `READY` event."""
+    """The user's set locale.
+
+    This is not provided in the `READY` event.
+    """
 
     is_verified: typing.Optional[bool] = attr.field(eq=False, hash=False, repr=False)
     """Whether the email for this user's account has been verified.


Test patch:
diff --git a/tests/hikari/impl/test_entity_factory.py b/tests/hikari/impl/test_entity_factory.py
index 85c9a3c0..95153bad 100644
--- a/tests/hikari/impl/test_entity_factory.py
+++ b/tests/hikari/impl/test_entity_factory.py
@@ -203,7 +203,6 @@ def application_payload(self, owner_payload, user_payload):
             "bot_public": True,
             "bot_require_code_grant": False,
             "owner": owner_payload,
-            "summary": "not a blank string",
             "verify_key": "698c5d0859abb686be1f8a19e0e7634d8471e33817650f9fb29076de227bca90",
             "flags": 65536,
             "team": {
@@ -215,9 +214,6 @@ def application_payload(self, owner_payload, user_payload):
                 ],
                 "owner_user_id": "393030292",
             },
-            "guild_id": "2020293939",
-            "primary_sku_id": "2020202002",
-            "slug": "192.168.1.254",
             "cover_image": "hashmebaby",
             "privacy_policy_url": "hahaha://hahaha",
             "terms_of_service_url": "haha2:2h2h2h2",
@@ -236,7 +232,6 @@ def test_deserialize_application(
         assert application.is_bot_code_grant_required is False
         assert application.owner == entity_factory_impl.deserialize_user(owner_payload)
         assert application.rpc_origins == ["127.0.0.0"]
-        assert application.summary == "not a blank string"
         assert (
             application.public_key
             == b'i\x8c]\x08Y\xab\xb6\x86\xbe\x1f\x8a\x19\xe0\xe7cM\x84q\xe38\x17e\x0f\x9f\xb2\x90v\xde"{\xca\x90'
@@ -260,9 +255,6 @@ def test_deserialize_application(
         assert member.user == entity_factory_impl.deserialize_user(user_payload)
         assert isinstance(member, application_models.TeamMember)
 
-        assert application.guild_id == 2020293939
-        assert application.primary_sku_id == 2020202002
-        assert application.slug == "192.168.1.254"
         assert application.cover_image_hash == "hashmebaby"
         assert isinstance(application, application_models.Application)
 
@@ -272,7 +264,6 @@ def test_deserialize_application_with_unset_fields(self, entity_factory_impl, mo
                 "id": "209333111222",
                 "name": "Dream Sweet in Sea Major",
                 "description": "I am an application",
-                "summary": "not a blank string",
                 "bot_public": True,
                 "bot_require_code_grant": False,
                 "verify_key": "1232313223",
@@ -283,9 +274,6 @@ def test_deserialize_application_with_unset_fields(self, entity_factory_impl, mo
 
         assert application.rpc_origins is None
         assert application.team is None
-        assert application.guild_id is None
-        assert application.primary_sku_id is None
-        assert application.slug is None
         assert application.icon_hash is None
         assert application.cover_image_hash is None
         assert application.privacy_policy_url is None
@@ -298,7 +286,6 @@ def test_deserialize_application_with_null_fields(self, entity_factory_impl, moc
                 "name": "Dream Sweet in Sea Major",
                 "icon": None,
                 "description": "",
-                "summary": "",
                 "team": None,
                 "owner": owner_payload,
                 "bot_public": True,
@@ -309,7 +296,6 @@ def test_deserialize_application_with_null_fields(self, entity_factory_impl, moc
         )
 
         assert application.description is None
-        assert application.summary is None
         assert application.icon_hash is None
         assert application.cover_image_hash is None
         assert application.team is None
@@ -321,7 +307,6 @@ def invite_application_payload(self):
             "name": "Betrayal.io",
             "icon": "0227b2e89ea08d666c43003fbadbc72a",
             "description": "Play inside Discord with your friends!",
-            "summary": "Play inside Discord with your friends! (but as a summary)",
             "cover_image": "0227b2e89ea08d666c43003fbadbc72a (but as cover)",
             "verify_key": "1bf78fdbfcbabe2e1256f9b133818976591203a22febabba5ff89f86f24760ff",
         }
@@ -334,7 +319,6 @@ def authorization_information_payload(self, user_payload):
                 "name": "abotnotabot",
                 "icon": "7c635c3cc8c7b109d254d8fcc1be85e6",
                 "description": "2123",
-                "summary": "dsasd",
                 "hook": True,
                 "bot_public": True,
                 "bot_require_code_grant": False,
@@ -359,7 +343,6 @@ def test_deserialize_authorization_information(
         assert application.name == "abotnotabot"
         assert application.description == "2123"
         assert application.icon_hash == "7c635c3cc8c7b109d254d8fcc1be85e6"
-        assert application.summary == "dsasd"
         assert application.public_key == b"okokodododo"
         assert application.is_bot_public is True
         assert application.is_bot_code_grant_required is False
@@ -1100,64 +1083,6 @@ def test_deserialize_guild_news_channel_with_null_fields(self, entity_factory_im
         assert news_channel.parent_id is None
         assert news_channel.last_pin_timestamp is None
 
-    @pytest.fixture()
-    def guild_store_channel_payload(self, permission_overwrite_payload):
-        return {
-            "id": "123",
-            "permission_overwrites": [permission_overwrite_payload],
-            "name": "Half Life 3",
-            "parent_id": "9876",
-            "nsfw": True,
-            "position": 2,
-            "guild_id": "1234",
-            "type": 6,
-        }
-
-    def test_deserialize_guild_store_channel(
-        self, entity_factory_impl, mock_app, guild_store_channel_payload, permission_overwrite_payload
-    ):
-        store_chanel = entity_factory_impl.deserialize_guild_store_channel(guild_store_channel_payload)
-        assert store_chanel.id == 123
-        assert store_chanel.name == "Half Life 3"
-        assert store_chanel.type == channel_models.ChannelType.GUILD_STORE
-        assert store_chanel.guild_id == 1234
-        assert store_chanel.position == 2
-        assert store_chanel.permission_overwrites == {
-            4242: entity_factory_impl.deserialize_permission_overwrite(permission_overwrite_payload)
-        }
-        assert store_chanel.is_nsfw is True
-        assert store_chanel.parent_id == 9876
-        assert isinstance(store_chanel, channel_models.GuildStoreChannel)
-
-    def test_deserialize_guild_store_channel_with_unset_fields(self, entity_factory_impl):
-        store_chanel = entity_factory_impl.deserialize_guild_store_channel(
-            {
-                "id": "123",
-                "permission_overwrites": [],
-                "name": "Half Life 3",
-                "position": 2,
-                "type": 6,
-                "guild_id": 123123,
-            }
-        )
-        assert store_chanel.parent_id is None
-        assert store_chanel.is_nsfw is None
-
-    def test_deserialize_guild_store_channel_with_null_fields(self, entity_factory_impl):
-        store_chanel = entity_factory_impl.deserialize_guild_store_channel(
-            {
-                "id": "123",
-                "permission_overwrites": [],
-                "name": "Half Life 3",
-                "parent_id": None,
-                "nsfw": True,
-                "position": 2,
-                "guild_id": "1234",
-                "type": 6,
-            }
-        )
-        assert store_chanel.parent_id is None
-
     @pytest.fixture()
     def guild_voice_channel_payload(self, permission_overwrite_payload):
         return {
@@ -1312,7 +1237,6 @@ def test_deserialize_channel_returns_right_type(
         guild_category_payload,
         guild_text_channel_payload,
         guild_news_channel_payload,
-        guild_store_channel_payload,
         guild_voice_channel_payload,
         guild_stage_channel_payload,
     ):
@@ -1322,7 +1246,6 @@ def test_deserialize_channel_returns_right_type(
             (guild_category_payload, channel_models.GuildCategory),
             (guild_text_channel_payload, channel_models.GuildTextChannel),
             (guild_news_channel_payload, channel_models.GuildNewsChannel),
-            (guild_store_channel_payload, channel_models.GuildStoreChannel),
             (guild_voice_channel_payload, channel_models.GuildVoiceChannel),
             (guild_stage_channel_payload, channel_models.GuildStageChannel),
         ]:
@@ -2073,7 +1996,6 @@ def integration_payload(self, user_payload):
                 "id": "123",
                 "name": "some bot",
                 "icon": "123abc",
-                "summary": "same as desc",
                 "description": "same as desc2",
                 "bot": {
                     "id": "456",
@@ -2112,7 +2034,6 @@ def test_deserialize_integration(self, entity_factory_impl, integration_payload,
         assert integration.application.id == 123
         assert integration.application.name == "some bot"
         assert integration.application.icon_hash == "123abc"
-        assert integration.application.summary == "same as desc"
         assert integration.application.description == "same as desc2"
         assert integration.application.bot == entity_factory_impl.deserialize_user(
             {
@@ -2165,10 +2086,8 @@ def test_deserialize_guild_integration_with_unset_bot(self, entity_factory_impl)
                     "id": 123,
                     "name": "some bot",
                     "icon": "123abc",
-                    "summary": "same as desc",
                     "description": "same as desc2",
                     "cover_image": "SMKLdiosa89123u",
-                    "primary_sku_id": "499494949494994",
                 },
             }
         )
@@ -3144,6 +3063,7 @@ def test_deserialize_command_interaction_with_null_attributes(
         command_interaction_payload["user"] = user_payload
         del command_interaction_payload["data"]["resolved"]
         del command_interaction_payload["data"]["options"]
+        del command_interaction_payload["guild_locale"]
 
         interaction = entity_factory_impl.deserialize_command_interaction(command_interaction_payload)
 
@@ -3152,6 +3072,7 @@ def test_deserialize_command_interaction_with_null_attributes(
         assert interaction.user == entity_factory_impl.deserialize_user(user_payload)
         assert interaction.options is None
         assert interaction.resolved is None
+        assert interaction.guild_locale is None
 
     @pytest.fixture()
     def autocomplete_interaction_payload(self, user_payload, interaction_resolved_data_payload):
@@ -3232,35 +3153,20 @@ def test_deserialize_autocomplete_interaction(
 
         assert isinstance(interaction, command_interactions.AutocompleteInteraction)
 
-    def test_deserialize_autocomplete_interaction_with_null_fields(self, entity_factory_impl, user_payload, mock_app):
-        interaction = entity_factory_impl.deserialize_autocomplete_interaction(
-            {
-                "id": "3490190239012093",
-                "type": 4,
-                "data": {
-                    "id": "43123123",
-                    "name": "okokokok",
-                    "type": 1,
-                    "options": [
-                        {"name": "go ice", "type": 6, "value": "115590097100865541"},
-                        {"name": "go fire", "type": 3, "value": "typing...", "focused": True},
-                        {"name": "stuff", "type": 1, "value": {"name": "stuff", "type": 3, "value": "none"}},
-                    ],
-                },
-                "user": user_payload,
-                "channel_id": "49949494",
-                "token": "moe cat girls",
-                "locale": "es-ES",
-                "guild_locale": "en-US",
-                "version": 69420,
-                "application_id": "76234234",
-            }
-        )
+    def test_deserialize_autocomplete_interaction_with_null_fields(
+        self, entity_factory_impl, user_payload, mock_app, autocomplete_interaction_payload
+    ):
+        del autocomplete_interaction_payload["data"]["resolved"]
+        del autocomplete_interaction_payload["guild_locale"]
+        del autocomplete_interaction_payload["guild_id"]
+
+        interaction = entity_factory_impl.deserialize_autocomplete_interaction(autocomplete_interaction_payload)
 
         assert interaction.guild_id is None
         assert interaction.member is None
         assert interaction.user == entity_factory_impl.deserialize_user(user_payload)
         assert interaction.resolved is None
+        assert interaction.guild_locale is None
 
     def test_deserialize_interaction_returns_expected_type(
         self, entity_factory_impl, command_interaction_payload, component_interaction_payload
@@ -3730,7 +3636,6 @@ def test_deserialize_invite(
         assert application.id == 773336526917861400
         assert application.name == "Betrayal.io"
         assert application.description == "Play inside Discord with your friends!"
-        assert application.summary == "Play inside Discord with your friends! (but as a summary)"
         assert (
             application.public_key
             == b"\x1b\xf7\x8f\xdb\xfc\xba\xbe.\x12V\xf9\xb13\x81\x89vY\x12\x03\xa2/\xeb\xab\xba_\xf8\x9f\x86\xf2G`\xff"
@@ -3753,14 +3658,12 @@ def test_deserialize_invite_with_null_fields(
                     "id": "773336526917861400",
                     "name": "Betrayal.io",
                     "description": "",
-                    "summary": "",
                     "verify_key": "1bf78fdbfcbabe2e1256f9b133818976591203a22febabba5ff89f86f24760ff",
                 },
             }
         )
         assert invite.expires_at is None
         assert invite.target_application.description is None
-        assert invite.target_application.summary is None
 
     def test_deserialize_invite_with_unset_fields(self, entity_factory_impl, partial_channel_payload):
         invite = entity_factory_impl.deserialize_invite(
@@ -3786,7 +3689,6 @@ def test_deserialize_invite_with_unset_sub_fields(self, entity_factory_impl, inv
             "id": "773336526917861400",
             "name": "Betrayal.io",
             "description": "Play inside Discord with your friends!",
-            "summary": "Play inside Discord with your friends! (but as a summary)",
             "verify_key": "1bf78fdbfcbabe2e1256f9b133818976591203a22febabba5ff89f86f24760ff",
         }
 
@@ -3894,7 +3796,6 @@ def test_deserialize_invite_with_metadata(
         assert application.id == 773336526917861400
         assert application.name == "Betrayal.io"
         assert application.description == "Play inside Discord with your friends!"
-        assert application.summary == "Play inside Discord with your friends! (but as a summary)"
         assert (
             application.public_key
             == b"\x1b\xf7\x8f\xdb\xfc\xba\xbe.\x12V\xf9\xb13\x81\x89vY\x12\x03\xa2/\xeb\xab\xba_\xf8\x9f\x86\xf2G`\xff"
@@ -4079,8 +3980,6 @@ def partial_application_payload(self):
             "description": "The best application",
             "icon": "2658b3029e775a931ffb49380073fa63",
             "cover_image": "58982a23790c4f22787b05d3be38a026",
-            "summary": "asas",
-            "primary_sku_id": "499494949494994",
         }
 
     @pytest.fixture()
@@ -4277,9 +4176,7 @@ def test_deserialize_partial_message(
         assert partial_message.application.name == "hikari"
         assert partial_message.application.description == "The best application"
         assert partial_message.application.icon_hash == "2658b3029e775a931ffb49380073fa63"
-        assert partial_message.application.summary == "asas"
         assert partial_message.application.cover_image_hash == "58982a23790c4f22787b05d3be38a026"
-        assert partial_message.application.primary_sku_id == 499494949494994
         assert isinstance(partial_message.application, message_models.MessageApplication)
         # MessageReference
         assert partial_message.message_reference.app is mock_app
@@ -4314,7 +4211,6 @@ def test_deserialize_partial_message(
     def test_deserialize_partial_message_with_partial_fields(self, entity_factory_impl, message_payload):
         message_payload["content"] = ""
         message_payload["edited_timestamp"] = None
-        message_payload["application"]["primary_sku_id"] = None
         message_payload["application"]["icon"] = None
         message_payload["referenced_message"] = None
         del message_payload["member"]
@@ -4328,7 +4224,6 @@ def test_deserialize_partial_message_with_partial_fields(self, entity_factory_im
         assert partial_message.edited_timestamp is None
         assert partial_message.guild_id is not None
         assert partial_message.member is undefined.UNDEFINED
-        assert partial_message.application.primary_sku_id is None
         assert partial_message.application.icon_hash is None
         assert partial_message.application.cover_image_hash is None
         assert partial_message.message_reference.id is None
@@ -4458,9 +4353,7 @@ def test_deserialize_message(
         assert message.application.name == "hikari"
         assert message.application.description == "The best application"
         assert message.application.icon_hash == "2658b3029e775a931ffb49380073fa63"
-        assert message.application.summary == "asas"
         assert message.application.cover_image_hash == "58982a23790c4f22787b05d3be38a026"
-        assert message.application.primary_sku_id == 499494949494994
         assert isinstance(message.application, message_models.MessageApplication)
 
         # MessageReference
@@ -4495,7 +4388,6 @@ def test_deserialize_message(
 
     def test_deserialize_message_with_unset_sub_fields(self, entity_factory_impl, message_payload):
         del message_payload["application"]["cover_image"]
-        del message_payload["application"]["primary_sku_id"]
         del message_payload["activity"]["party_id"]
         del message_payload["message_reference"]["message_id"]
         del message_payload["message_reference"]["guild_id"]
@@ -4511,7 +4403,6 @@ def test_deserialize_message_with_unset_sub_fields(self, entity_factory_impl, me
 
         # MessageApplication
         assert message.application.cover_image_hash is None
-        assert message.application.primary_sku_id is None
         assert isinstance(message.application, message_models.MessageApplication)
 
         # MessageReference
@@ -4576,14 +4467,12 @@ def test_deserialize_message_with_null_and_unset_fields(
         assert message.components == []
 
     def test_deserialize_message_with_other_unset_fields(self, entity_factory_impl, message_payload):
-        message_payload["application"]["primary_sku_id"] = None
         message_payload["application"]["icon"] = None
         message_payload["referenced_message"] = None
         del message_payload["member"]
         del message_payload["application"]["cover_image"]
 
         message = entity_factory_impl.deserialize_message(message_payload)
-        assert message.application.primary_sku_id is None
         assert message.application.cover_image_hash is None
         assert message.application.icon_hash is None
         assert message.referenced_message is None
@@ -5365,7 +5254,6 @@ def test_deserialize_my_user_with_unset_fields(self, entity_factory_impl, mock_a
                 "username": "qt pi",
                 "avatar": "820d0e50543216e812ad94e6ab7",
                 "discriminator": "2880",
-                "locale": "en-US",
                 "mfa_enabled": True,
                 "public_flags": int(user_models.UserFlag.EARLY_VERIFIED_DEVELOPER),
                 "flags": int(user_models.UserFlag.PARTNERED_SERVER_OWNER | user_models.UserFlag.DISCORD_EMPLOYEE),
@@ -5379,6 +5267,7 @@ def test_deserialize_my_user_with_unset_fields(self, entity_factory_impl, mock_a
         assert my_user.is_system is False
         assert my_user.is_verified is None
         assert my_user.email is None
+        assert my_user.locale is None
         assert isinstance(my_user, user_models.OwnUser)
 
     ################
diff --git a/tests/hikari/impl/test_rest.py b/tests/hikari/impl/test_rest.py
index 5b15e922..f6bf5f94 100644
--- a/tests/hikari/impl/test_rest.py
+++ b/tests/hikari/impl/test_rest.py
@@ -3361,7 +3361,7 @@ async def test_add_user_to_guild(self, rest_client):
             "token",
             StubModel(123),
             StubModel(456),
-            nick="cool nick",
+            nickname="cool nick",
             roles=[StubModel(234), StubModel(567)],
             mute=True,
             deaf=False,
@@ -3371,6 +3371,28 @@ async def test_add_user_to_guild(self, rest_client):
         rest_client._request.assert_awaited_once_with(expected_route, json=expected_json)
         rest_client._entity_factory.deserialize_member.assert_called_once_with({"id": "789"}, guild_id=123)
 
+    async def test_add_user_to_guild_with_deprecated_nick_field(self, rest_client):
+        member = StubModel(789)
+        expected_route = routes.PUT_GUILD_MEMBER.compile(guild=123, user=456)
+        expected_json = {"access_token": "token", "nick": "cool nick2"}
+        rest_client._request = mock.AsyncMock(return_value={"id": "789"})
+        rest_client._entity_factory.deserialize_member = mock.Mock(return_value=member)
+
+        with pytest.warns(
+            DeprecationWarning,
+            match="'nick' is deprecated and will be removed in a following version. You can use 'nickname' instead.",
+        ):
+            returned = await rest_client.add_user_to_guild(
+                "token",
+                StubModel(123),
+                StubModel(456),
+                nick="cool nick2",
+            )
+
+        assert returned is member
+        rest_client._request.assert_awaited_once_with(expected_route, json=expected_json)
+        rest_client._entity_factory.deserialize_member.assert_called_once_with({"id": "789"}, guild_id=123)
+
     async def test_add_user_to_guild_when_already_in_guild(self, rest_client):
         expected_route = routes.PUT_GUILD_MEMBER.compile(guild=123, user=456)
         expected_json = {"access_token": "token"}
@@ -4008,7 +4030,7 @@ async def test_edit_member(self, rest_client):
         result = await rest_client.edit_member(
             StubModel(123),
             StubModel(456),
-            nick="test",
+            nickname="test",
             roles=[StubModel(654), StubModel(321)],
             mute=True,
             deaf=False,
@@ -4023,6 +4045,24 @@ async def test_edit_member(self, rest_client):
         )
         rest_client._request.assert_awaited_once_with(expected_route, json=expected_json, reason="because i can")
 
+    async def test_edit_member_with_deprecated_nick_field(self, rest_client):
+        expected_route = routes.PATCH_GUILD_MEMBER.compile(guild=123, user=456)
+        expected_json = {"nick": "eeeeeestrogen"}
+        rest_client._request = mock.AsyncMock(return_value={"id": "789"})
+
+        with pytest.warns(
+            DeprecationWarning,
+            match="'nick' is deprecated and will be removed in a following version. You can use 'nickname' instead.",
+        ):
+            result = await rest_client.edit_member(StubModel(123), StubModel(456), nick="eeeeeestrogen")
+
+        assert result is rest_client._entity_factory.deserialize_member.return_value
+
+        rest_client._entity_factory.deserialize_member.assert_called_once_with(
+            rest_client._request.return_value, guild_id=123
+        )
+        rest_client._request.assert_awaited_once_with(expected_route, json=expected_json, reason=undefined.UNDEFINED)
+
     async def test_edit_member_when_voice_channel_is_None(self, rest_client):
         expected_route = routes.PATCH_GUILD_MEMBER.compile(guild=123, user=456)
         expected_json = {"nick": "test", "roles": ["654", "321"], "mute": True, "deaf": False, "channel_id": None}
@@ -4031,7 +4071,7 @@ async def test_edit_member_when_voice_channel_is_None(self, rest_client):
         result = await rest_client.edit_member(
             StubModel(123),
             StubModel(456),
-            nick="test",
+            nickname="test",
             roles=[StubModel(654), StubModel(321)],
             mute=True,
             deaf=False,
diff --git a/tests/hikari/internal/test_routes.py b/tests/hikari/internal/test_routes.py
index 55a8e9f1..de5be53e 100644
--- a/tests/hikari/internal/test_routes.py
+++ b/tests/hikari/internal/test_routes.py
@@ -54,6 +54,7 @@ class TestRoute:
             (routes.DELETE_CHANNEL, frozenset(("channel",))),
             (routes.PATCH_GUILD, frozenset(("guild",))),
             (routes.POST_WEBHOOK_WITH_TOKEN, frozenset(("webhook", "token"))),
+            (routes.GET_WEBHOOK, frozenset(("webhook",))),
             (routes.GET_INVITE, None),
         ],
     )
diff --git a/tests/hikari/test_guilds.py b/tests/hikari/test_guilds.py
index 3caf43cc..be274883 100644
--- a/tests/hikari/test_guilds.py
+++ b/tests/hikari/test_guilds.py
@@ -429,7 +429,7 @@ async def test_edit(self, model):
         model.app.rest.edit_member = mock.AsyncMock()
         disabled_until = datetime.datetime(2021, 11, 17)
         edit = await model.edit(
-            nick="Imposter",
+            nickname="Imposter",
             roles=[123, 432, 345],
             mute=False,
             deaf=True,
@@ -441,7 +441,7 @@ async def test_edit(self, model):
         model.app.rest.edit_member.assert_awaited_once_with(
             456,
             123,
-            nick="Imposter",
+            nickname="Imposter",
             roles=[123, 432, 345],
             mute=False,
             deaf=True,
@@ -452,6 +452,29 @@ async def test_edit(self, model):
 
         assert edit == model.app.rest.edit_member.return_value
 
+    @pytest.mark.asyncio()
+    async def test_edit_when_deprecated_nick_field(self, model):
+        model.app.rest.edit_member = mock.AsyncMock()
+
+        with pytest.warns(
+            DeprecationWarning,
+            match="'nick' is deprecated and will be removed in a following version. You can use 'nickname' instead.",
+        ):
+            edit = await model.edit(nick="meow")
+
+        model.app.rest.edit_member.assert_awaited_once_with(
+            456,
+            123,
+            nickname="meow",
+            roles=undefined.UNDEFINED,
+            mute=undefined.UNDEFINED,
+            deaf=undefined.UNDEFINED,
+            voice_channel=undefined.UNDEFINED,
+            communication_disabled_until=undefined.UNDEFINED,
+            reason=undefined.UNDEFINED,
+        )
+        assert edit == model.app.rest.edit_member.return_value
+
     def test_default_avatar_url_property(self, model, mock_user):
         assert model.default_avatar_url is mock_user.default_avatar_url
 
diff --git a/tests/hikari/test_messages.py b/tests/hikari/test_messages.py
index ee7ad9ac..1e95ddfe 100644
--- a/tests/hikari/test_messages.py
+++ b/tests/hikari/test_messages.py
@@ -64,9 +64,7 @@ def message_application(self):
             name="test app",
             description="",
             icon_hash="123abc",
-            summary="some summary",
             cover_image_hash="abc123",
-            primary_sku_id=456,
         )
 
     def test_cover_image_url(self, message_application):