different api constructors

This commit is contained in:
AF 2022-12-13 20:27:30 +00:00
parent de088611e3
commit 39cf4f1691

View File

@ -71,7 +71,7 @@ class UserApi:
member = guild.get_member(self.user_id) or await guild.fetch_member(self.user_id) member = guild.get_member(self.user_id) or await guild.fetch_member(self.user_id)
if member is None: if member is None:
raise UserApi.UnknownMember('unknown member of a guild') raise UserApi.UnknownMember('unknown member of a guild')
return GuildApi(self.pi, self.request, member) return GuildApi(self, member)
async def _operator_api(self) -> 'OperatorApi': async def _operator_api(self) -> 'OperatorApi':
if not self.pi.is_operator(self.user_id): if not self.pi.is_operator(self.user_id):
@ -120,8 +120,8 @@ class GuildApi(UserApi):
class VoiceNotConnected(Api.MisusedApi): class VoiceNotConnected(Api.MisusedApi):
pass pass
def __init__(self, api: Api, request: dict, member: discord.Member) -> None: def __init__(self, api: UserApi, member: discord.Member) -> None:
super().__init__(api, request, member.id) super().__init__(api.pi, api.request, member.id)
self.member = member self.member = member
self.guild = member.guild self.guild = member.guild
@ -136,10 +136,10 @@ class GuildApi(UserApi):
raise GuildApi.VoiceNotConnected('bot client user not initialised') raise GuildApi.VoiceNotConnected('bot client user not initialised')
if self.client.user.id not in channel.voice_states: if self.client.user.id not in channel.voice_states:
raise GuildApi.VoiceNotConnected('bot not connected') raise GuildApi.VoiceNotConnected('bot not connected')
return VoiceApi(self.pi, self.request, self.member, channel) return VoiceApi(self, channel)
def sub(self, request: dict) -> 'GuildApi': def sub(self, request: dict) -> 'GuildApi':
return GuildApi(self.pi, request, self.member) return GuildApi(super().sub(request), self.member)
async def _api(self) -> ResponseType: async def _api(self) -> ResponseType:
match self.request: match self.request:
@ -156,18 +156,18 @@ class GuildApi(UserApi):
class VoiceApi(GuildApi): class VoiceApi(GuildApi):
def __init__( def __init__(
self, api: Api, request: dict, member: discord.Member, channel: discord.VoiceChannel | discord.StageChannel self, api: GuildApi, channel: discord.VoiceChannel | discord.StageChannel
) -> None: ) -> None:
super().__init__(api, request, member) super().__init__(api, api.member)
self.channel = channel self.channel = channel
async def _main_api(self) -> 'MainApi': async def _main_api(self) -> 'MainApi':
vc = await raw_vc_for_member(self.member) vc = await raw_vc_for_member(self.member)
main = await main_for_raw_vc(vc, create=False, force_play=False) main = await main_for_raw_vc(vc, create=False, force_play=False)
return MainApi(self.pi, self.request, self.member, self.channel, vc, main) return MainApi(self, vc, main)
def sub(self, request: dict) -> 'VoiceApi': def sub(self, request: dict) -> 'VoiceApi':
return VoiceApi(self.pi, request, self.member, self.channel) return VoiceApi(super().sub(request), self.channel)
async def _api(self) -> ResponseType: async def _api(self) -> ResponseType:
match self.request: match self.request:
@ -184,15 +184,14 @@ class VoiceApi(GuildApi):
class MainApi(VoiceApi): class MainApi(VoiceApi):
def __init__( def __init__(
self, api: Api, request: dict, member: discord.Member, channel: discord.VoiceChannel | discord.StageChannel, self, api: VoiceApi, vc: discord.VoiceClient, main: MainAudio
vc: discord.VoiceClient, main: MainAudio
) -> None: ) -> None:
super().__init__(api, request, member, channel) super().__init__(api, api.channel)
self.vc = vc self.vc = vc
self.main = main self.main = main
def sub(self, request: dict) -> 'MainApi': def sub(self, request: dict) -> 'MainApi':
return MainApi(self.pi, request, self.member, self.channel, self.vc, self.main) return MainApi(super().sub(request), self.vc, self.main)
async def _api(self) -> ResponseType: async def _api(self) -> ResponseType:
match self.request: match self.request: