Migrate scripts to voicelink, rewrite handlers and views
This commit is contained in:
@@ -22,11 +22,10 @@ SOFTWARE.
|
||||
"""
|
||||
|
||||
import time, logging
|
||||
import function as func
|
||||
|
||||
from math import ceil
|
||||
from asyncio import sleep
|
||||
from views import InteractiveController
|
||||
from random import shuffle, choice
|
||||
from typing import Any, Dict, List, Optional, Union, Tuple
|
||||
|
||||
from discord import (
|
||||
@@ -45,18 +44,22 @@ from discord import (
|
||||
from discord.ext import commands
|
||||
|
||||
from . import events
|
||||
from .config import Config
|
||||
from .pool import Node, NodePool
|
||||
from .objects import Track, Playlist
|
||||
from .filters import Filter, Filters
|
||||
from .enums import SearchType, LoopType, RequestMethod
|
||||
from .events import VoicelinkEvent, TrackEndEvent, TrackStartEvent, TrackExceptionEvent
|
||||
from .exceptions import VoicelinkException, FilterInvalidArgument, TrackInvalidPosition, FilterTagAlreadyInUse, DuplicateTrack
|
||||
from .filters import Filter, Filters
|
||||
from .objects import Track, Playlist
|
||||
from .pool import Node, NodePool
|
||||
from .placeholders import Placeholders, build_embed
|
||||
from .placeholders import PlayerPlaceholder
|
||||
from .queue import Queue, QUEUE_TYPES
|
||||
from random import shuffle, choice
|
||||
from .mongodb import MongoDBHandler
|
||||
from .language import LangHandler
|
||||
from .views import InteractiveController
|
||||
from .utils import format_ms, dispatch_message
|
||||
|
||||
async def connect_channel(ctx: Union[commands.Context, Interaction], channel: VoiceChannel = None):
|
||||
texts = await func.get_lang(ctx.guild.id, "noChannel", "noPermission")
|
||||
texts = await LangHandler.get_lang(ctx.guild.id, "noChannel", "noPermission")
|
||||
try:
|
||||
channel = channel or ctx.author.voice.channel if isinstance(ctx, commands.Context) else ctx.user.voice.channel
|
||||
except:
|
||||
@@ -66,7 +69,7 @@ async def connect_channel(ctx: Union[commands.Context, Interaction], channel: Vo
|
||||
if check.connect == False or check.speak == False:
|
||||
raise VoicelinkException(texts[1])
|
||||
|
||||
settings = await func.get_settings(channel.guild.id)
|
||||
settings = await MongoDBHandler.get_settings(channel.guild.id)
|
||||
player: Player = await channel.connect(
|
||||
cls=Player(
|
||||
ctx.bot if isinstance(ctx, commands.Context) else ctx.client,
|
||||
@@ -116,7 +119,7 @@ class Player(VoiceProtocol):
|
||||
self.joinTime: float = round(time.time())
|
||||
self._volume: int = self.settings.get('volume', 100)
|
||||
self.queue: Queue = QUEUE_TYPES.get(self.settings.get("queue_type", "queue").lower())(
|
||||
self.settings.get("max_queue", func.settings.max_queue),
|
||||
self.settings.get("max_queue", Config().max_queue),
|
||||
self.settings.get("duplicate_track", True), self.get_msg
|
||||
)
|
||||
|
||||
@@ -145,7 +148,7 @@ class Player(VoiceProtocol):
|
||||
self.shuffle_votes = set()
|
||||
self.stop_votes = set()
|
||||
|
||||
self._ph = Placeholders(client, self)
|
||||
self._ph = PlayerPlaceholder(client, self)
|
||||
self._logger: Optional[logging.Logger] = self._node._logger
|
||||
|
||||
def __repr__(self):
|
||||
@@ -258,7 +261,7 @@ class Player(VoiceProtocol):
|
||||
"""Retrieves a localized message or list of messages based on the given keys
|
||||
for the guild associated with this player.
|
||||
"""
|
||||
return func._get_lang(self.settings.get("lang"), *keys)
|
||||
return LangHandler._get_lang(self.settings.get("lang"), *keys)
|
||||
|
||||
def required(self, leave=False):
|
||||
"""
|
||||
@@ -291,7 +294,7 @@ class Player(VoiceProtocol):
|
||||
has 'Manage Server' permission, or meets the DJ role criteria in the settings.
|
||||
Raises an exception if `check_user_join` is True and the user is not in the channel.
|
||||
"""
|
||||
if user.id in func.settings.bot_access_user:
|
||||
if user.id in Config().bot_access_user:
|
||||
return True
|
||||
|
||||
manage_perm = user.guild_permissions.manage_guild
|
||||
@@ -304,10 +307,10 @@ class Player(VoiceProtocol):
|
||||
|
||||
def build_embed(self, current_track: Track = None):
|
||||
"""Builds an embed based on the current track state."""
|
||||
controller = self.settings.get("default_controller", func.settings.controller).get("embeds", {})
|
||||
controller = self.settings.get("default_controller", Config().controller).get("embeds", {})
|
||||
embed_form = controller.get("active" if current_track else "inactive", {})
|
||||
|
||||
return build_embed(embed_form, self._ph)
|
||||
return PlayerPlaceholder.build_embed(embed_form, self._ph)
|
||||
|
||||
async def send(self, method: RequestMethod, query: str = None, data: Union[Dict, str] = {}) -> Dict:
|
||||
"""Sends an HTTP request to the node with the given method, query, and data."""
|
||||
@@ -424,7 +427,7 @@ class Player(VoiceProtocol):
|
||||
return await self.do_next()
|
||||
|
||||
if not track.requester.bot:
|
||||
self._bot.loop.create_task(func.update_user(track.requester.id, {
|
||||
self._bot.loop.create_task(MongoDBHandler.update_user(track.requester.id, {
|
||||
"$push": {"history": {"$each": [track.track_id], "$slice": -25}}
|
||||
}))
|
||||
|
||||
@@ -463,11 +466,11 @@ class Player(VoiceProtocol):
|
||||
|
||||
# Send a new controller message if none exists
|
||||
if not self.controller:
|
||||
self.controller = await func.send(self.context, content=embed, view=view, requires_fetch=True)
|
||||
self.controller = await dispatch_message(self.context, content=embed, view=view, requires_fetch=True)
|
||||
|
||||
elif not await self.is_position_fresh():
|
||||
await self.controller.delete()
|
||||
self.controller = await func.send(self.context, content=embed, view=view, requires_fetch=True)
|
||||
self.controller = await dispatch_message(self.context, content=embed, view=view, requires_fetch=True)
|
||||
|
||||
else:
|
||||
await self.controller.edit(embed=embed, view=view)
|
||||
@@ -495,7 +498,7 @@ class Player(VoiceProtocol):
|
||||
async def teardown(self):
|
||||
"""Cleans up the player and associated resources."""
|
||||
try:
|
||||
await func.update_settings(self.guild.id, {"$set": {
|
||||
await MongoDBHandler.update_settings(self.guild.id, {"$set": {
|
||||
"last_active": (timeNow := round(time.time())),
|
||||
"played_time": round(self.settings.get("played_time", 0) + ((timeNow - self.joinTime) / 60), 2)
|
||||
}})
|
||||
@@ -611,9 +614,9 @@ class Player(VoiceProtocol):
|
||||
|
||||
track_length = track.length
|
||||
if not 0 <= start_time <= track_length:
|
||||
raise VoicelinkException(self.get_msg("invalidStartTime", func.time(track_length)))
|
||||
raise VoicelinkException(self.get_msg("invalidStartTime", format_ms(track_length)))
|
||||
if not 0 <= end_time <= track_length:
|
||||
raise VoicelinkException(self.get_msg("invalidEndTime", func.time(track_length)))
|
||||
raise VoicelinkException(self.get_msg("invalidEndTime", format_ms(track_length)))
|
||||
|
||||
track.position = start_time
|
||||
track.end_time = end_time
|
||||
@@ -864,7 +867,7 @@ class Player(VoiceProtocol):
|
||||
|
||||
async def update_voice_status(self, remove_status: bool = False) -> None:
|
||||
"""Updates the voice status of the channel based on the specified template."""
|
||||
template = self.settings.get("stage_announce_template", func.settings.voice_status_template)
|
||||
template = self.settings.get("stage_announce_template", Config().voice_status_template)
|
||||
if not template or not self.channel:
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user