temporary support for adaas + remove bundled tor

This commit is contained in:
AF 2022-11-01 17:47:22 +00:00
parent 848c5b70b2
commit 40145ae3da
7 changed files with 22 additions and 13 deletions

View File

@ -4,12 +4,10 @@ WORKDIR /v6
ENV v6root=/v6data ENV v6root=/v6data
RUN apt-get update RUN apt-get update
RUN apt-get install -y libopus0 opus-tools ffmpeg RUN apt-get install -y libopus0 opus-tools ffmpeg
RUN apt-get install -y tor
COPY requirements.txt requirements.txt COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
RUN apt-get install -y tor obfs4proxy
COPY v6d3music v6d3music COPY v6d3music v6d3music
RUN printf "\nClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy\nBridge obfs4 185.177.207.210:11210 044DEFCA9726828CAE0F880DFEDB6D957006087A cert=mLCpY31wGw9Vs1tQdCXGIyZaAQ6RCdWvw50klpDAk/4mZvA+wekmLZQRqatcbuMp2y36TQ iat-mode=1\nUseBridges 1\n" >> "/etc/tor/torrc"
ENV v6host=0.0.0.0 ENV v6host=0.0.0.0
EXPOSE 5930
ENV v6port=5930 ENV v6port=5930
CMD ["python3", "-m", "v6d3music.run-bot"] CMD ["python3", "-m", "v6d3music.run-bot"]

View File

@ -1,5 +1,6 @@
aiohttp~=3.7.4.post0 aiohttp~=3.7.4.post0
discord.py[voice]~=1.7.3 discord.py[voice]~=1.7.3
git+https://gitea.parrrate.ru/PTV/v6d1tokens.git@c4c6cf43b1082c666e6891f73df825acee6ae86d
git+https://gitea.parrrate.ru/PTV/v6d2ctx.git@096314b9bbb6153a9a75afcc16ddf7833384df18
youtube_dl~=2021.12.17 youtube_dl~=2021.12.17
git+https://gitea.parrrate.ru/PTV/v6d1tokens.git@d382a0aa59525c40009bc9e6c30aaec3e506062a
git+https://gitea.parrrate.ru/PTV/v6d2ctx.git@096314b9bbb6153a9a75afcc16ddf7833384df18
git+https://gitea.parrrate.ru/PTV/adaas.git@2052448b19f895dee5cec9eaec470243d130d253

View File

@ -13,6 +13,7 @@ from v6d3music.utils.presets import allowed_effects
async def create_ytaudio( async def create_ytaudio(
ctx: Context, info: dict[str, Any], effects: Optional[str], already_read: int, tor: bool ctx: Context, info: dict[str, Any], effects: Optional[str], already_read: int, tor: bool
) -> YTAudio: ) -> YTAudio:
assert ctx.member is not None
if effects: if effects:
if effects not in allowed_effects: if effects not in allowed_effects:
assert_admin(ctx.member) assert_admin(ctx.member)

View File

@ -72,6 +72,9 @@ class FFmpegNormalAudio(discord.FFmpegAudio):
return chunk return chunk
def droppable(self) -> bool: def droppable(self) -> bool:
if self.loaded_at is None:
return False
else:
return self._loaded and time.time() - self.loaded_at < 600 return self._loaded and time.time() - self.loaded_at < 600
def read(self): def read(self):

View File

@ -10,18 +10,20 @@ mainasrcs: dict[discord.Guild, MainAudio] = {}
async def raw_vc_for(ctx: Context) -> discord.VoiceClient: async def raw_vc_for(ctx: Context) -> discord.VoiceClient:
if ctx.guild is None: if ctx.guild is None:
raise Explicit('not in a guild') raise Explicit('not in a guild')
vc: discord.VoiceProtocol = ctx.guild.voice_client assert ctx.member is not None
vc: discord.VoiceProtocol | None = ctx.guild.voice_client
if vc is None or isinstance(vc, discord.VoiceClient) and not vc.is_connected(): if vc is None or isinstance(vc, discord.VoiceClient) and not vc.is_connected():
vs: discord.VoiceState = ctx.member.voice vs: discord.VoiceState | None = ctx.member.voice
if vs is None: if vs is None:
raise Explicit('not connected') raise Explicit('not connected')
vch: discord.VoiceChannel = vs.channel vch: discord.VoiceChannel | None = vs.channel # type: ignore
if vch is None: if vch is None:
raise Explicit('not connected') raise Explicit('not connected')
try: try:
vc: discord.VoiceProtocol = await vch.connect() vc = await vch.connect()
except discord.ClientException: except discord.ClientException:
vc: discord.VoiceProtocol = ctx.guild.voice_client vc = ctx.guild.voice_client
assert vc is not None
await ctx.guild.fetch_channels() await ctx.guild.fetch_channels()
await vc.disconnect(force=True) await vc.disconnect(force=True)
raise Explicit('try again later') raise Explicit('try again later')

View File

@ -1,6 +1,7 @@
import asyncio import asyncio
import subprocess import subprocess
from typing import Optional from typing import Optional
from adaas.cachedb import RemoteCache
from v6d2ctx.context import Benchmark from v6d2ctx.context import Benchmark
@ -10,6 +11,8 @@ from v6d3music.utils.tor_prefix import tor_prefix
async def real_url(url: str, override: bool, tor: bool) -> str: async def real_url(url: str, override: bool, tor: bool) -> str:
if not tor:
return await RemoteCache().real_url(url, override, tor)
hurl: str = bytes_hash(url.encode()) hurl: str = bytes_hash(url.encode())
if not override: if not override:
curl: Optional[str] = cache_db.get(f'url:{hurl}', None) curl: Optional[str] = cache_db.get(f'url:{hurl}', None)
@ -33,6 +36,7 @@ async def real_url(url: str, override: bool, tor: bool) -> str:
code = await loop.run_in_executor(None, p.wait) code = await loop.run_in_executor(None, p.wait)
if code: if code:
raise RuntimeError(code) raise RuntimeError(code)
assert p.stdout is not None
rurl: str = p.stdout.readline().decode()[:-1] rurl: str = p.stdout.readline().decode()[:-1]
loop.create_task(cache_url(hurl, rurl, override, tor)) loop.create_task(cache_url(hurl, rurl, override, tor))
return rurl return rurl

View File

@ -61,7 +61,7 @@ async def restore_vcs():
async with lock_for(guild, 'not in a guild'): async with lock_for(guild, 'not in a guild'):
channels = await guild.fetch_channels() channels = await guild.fetch_channels()
channel: discord.VoiceChannel channel: discord.VoiceChannel
channel, = [ch for ch in channels if ch.id == vccid] channel, = [ch for ch in (chc for chc in channels if isinstance(chc, discord.VoiceChannel)) if ch.id == vccid]
vp: discord.VoiceProtocol = await channel.connect() vp: discord.VoiceProtocol = await channel.connect()
assert isinstance(vp, discord.VoiceClient) assert isinstance(vp, discord.VoiceClient)
vc = vp vc = vp
@ -105,7 +105,7 @@ async def save_vcs(delay: bool):
if vcs_restored: if vcs_restored:
vcs = [] vcs = []
vc: discord.VoiceClient vc: discord.VoiceClient
for vc in list(client.voice_clients): for vc in (vcc for vcc in client.voice_clients if isinstance(vcc, discord.VoiceClient)):
if delay: if delay:
await asyncio.sleep(0.01) await asyncio.sleep(0.01)
if vc.is_playing(): if vc.is_playing():