Add custom embed

This commit is contained in:
Choco
2023-04-12 17:16:03 +08:00
parent 19d3302806
commit 091496099a
10 changed files with 104 additions and 41 deletions

View File

@@ -13,7 +13,35 @@ class Settings:
self.emoji_source_raw = settings.get("emoji_source_raw", {})
self.cooldowns_settings = settings.get("cooldowns", {})
self.aliases_settings = settings.get("aliases", {})
self.controller_settings = settings.get("controller", [["back", "resume", "skip", {"stop": "red"}, "add"], ["tracks"]])
self.controller = settings.get("default_controller",
{
"embeds": {
"active": {
"description": "**Now Playing: ```[@@track_name@@]```\nLink: [Click Me](@@track_url@@) | Requester: @@requester@@ | DJ: @@dj@@**",
"footer": {
"text": "Queue Length: @@queue_length@@ | Duration: @@duration@@ | Volume: @@volume@@% {{loop_mode!=Off ?? | Repeat: @@loop_mode@@}}",
},
"image": "@@track_thumbnail@@",
"author": {
"name": "Music Controller | @@channel_name@@",
"icon_url": "@@bot_icon@@"
},
"color": "@@default_embed_color@@"
},
"inactive": {
"header": {
"title": "There are no songs playing right now"
},
"description": "[Support](@@server_invite_link@@) | [Invite](@@invite_link@@) | [Questionnaire](https://forms.gle/Qm8vjBfg2kp13YGD7)",
"image": "https://i.imgur.com/dIFBwU7.png",
"color": "@@default_embed_color@@"
}
},
"default_buttons": [
["back", "resume", "skip", {"stop": "red"}, "add"],
["tracks"]
]
})
self.lyrics_platform = settings.get("lyrics_platform", "A_ZLyrics").lower()
self.ipc_server = settings.get("ipc_server", {
"host": "127.0.0.1",

View File

@@ -106,10 +106,6 @@
"playlistrepeated": "您的播放列表中已經有相同的曲目!",
"playlistAdded": "❤️ 將 **{0}** 添加到 {1} 的播放列表 [`{2}`]",
"playerAuthor": "音樂控制器 | {0}",
"playerDesc": "**現在播放: ```[{0}]```\n鏈接: [點擊我]({1}) | 請求者: {2} | DJ: {3}**",
"playerFooter": "隊列長度: {0} | 時長: {1} | 音量: {2}% {3}",
"playerFooter2": "| 重複: {0}",
"playerDropdown": "選擇要跳到的歌曲...",
"buttonBack": "後退",

View File

@@ -106,10 +106,6 @@
"playlistrepeated": "Es gibt bereits denselben Titel in Ihrer Playlist!",
"playlistAdded": "❤️ **{0}** zur Playlist [`{2}`] von {1} hinzugefügt!",
"playerAuthor": "Musik-Controller | {0}",
"playerDesc": "**Läuft gerade: ```[{0}]```\nLink: [Klick mich]({1}) | Anforderer: {2} | DJ: {3}**",
"playerFooter": "Warteschlangelänge: {0} | Dauer: {1} | Lautstärke: {2}% {3}",
"playerFooter2": "| Wiederholen: {0}",
"playerDropdown": "Wählen Sie einen Song aus, zudem Sie springen möchten...",
"buttonBack": "Zurück",

View File

@@ -106,10 +106,6 @@
"playlistrepeated": "There is already the same track in your playlist!",
"playlistAdded": "❤️ Added **{0}** into {1}'s playlist [`{2}`]!",
"playerAuthor": "Music Controller | {0}",
"playerDesc": "**Now Playing: ```[{0}]```\nLink: [Click Me]({1}) | Requester: {2} | DJ: {3}**",
"playerFooter": "Queue Length: {0} | Duration: {1} | Volume: {2}% {3}",
"playerFooter2": "| Repeat: {0}",
"playerDropdown": "Select a song to skip to ...",
"buttonBack": "Back",

View File

@@ -106,10 +106,6 @@
"playlistrepeated": "プレイリストにはすでに同じトラックがあります!",
"playlistAdded": "❤️ {1}のプレイリスト[`{2}`]に** {0} **を追加しました!",
"playerAuthor": "ミュージックコントローラー | {0}",
"playerDesc": "**再生中: ```[{0}]```\nリンク: [クリックしてください]({1}) | リクエスター: {2} | DJ: {3}**",
"playerFooter": "キューの長さ: {0} | 間隔: {1} | 音量: {2}% {3}",
"playerFooter2": "| 繰り返す: {0}",
"playerDropdown": "スキップする曲を選択してください...",
"buttonBack": "戻る",

View File

@@ -106,10 +106,6 @@
"playlistrepeated": "재생 목록에 이미 같은 트랙이 있습니다!",
"playlistAdded": "❤️ **{0}**을 {1}의 재생목록 [`{2}`]에 추가했습니다!",
"playerAuthor": "음악 컨트롤러 | {0}",
"playerDesc": "**지금 재생 중: ```[{0}]```\n링크: [클릭 해주세요]({1}) | 요청자: {2} | DJ: {3}**",
"playerFooter": "대기열 길이: {0} | 지속: {1} | 무게: {2}% {3}",
"playerFooter2": "| 반복하다: {0}",
"playerDropdown": "건너뛸 노래 선택 ...",
"buttonBack": "뒤",

View File

@@ -33,10 +33,34 @@
"reddit": "<:reddit:996007566863773717>",
"tiktok": "<:tiktok:996007689798811698>"
},
"controller": [
["back", "resume", "skip", {"stop": "red"}, "add"],
["tracks"]
],
"default_controller": {
"embeds": {
"active": {
"description": "**Now Playing: ```[@@track_name@@]```\nLink: [Click Me](@@track_url@@) | Requester: @@requester@@ | DJ: @@dj@@**",
"footer": {
"text": "Queue Length: @@queue_length@@ | Duration: @@duration@@ | Volume: @@volume@@% {{loop_mode!=Off ?? | Repeat: @@loop_mode@@}}"
},
"image": "@@track_thumbnail@@",
"author": {
"name": "Music Controller | @@channel_name@@",
"icon_url": "@@bot_icon@@"
},
"color": "@@default_embed_color@@"
},
"inactive": {
"header": {
"title": "There are no songs playing right now"
},
"description": "[Support](@@server_invite_link@@) | [Invite](@@invite_link@@) | [Questionnaire](https://forms.gle/Qm8vjBfg2kp13YGD7)",
"image": "https://i.imgur.com/dIFBwU7.png",
"color": "@@default_embed_color@@"
}
},
"default_buttons": [
["back", "resume", "skip", {"stop": "red"}, "add"],
["tracks"]
]
},
"cooldowns": {
"connect": [2, 30],
"playlist view": [1, 30]

View File

@@ -335,7 +335,7 @@ class InteractiveController(discord.ui.View):
super().__init__(timeout=None)
self.player = player
for row, btnRow in enumerate(func.settings.controller_settings):
for row, btnRow in enumerate(func.settings.controller.get("default_buttons")):
for btn in btnRow:
color = ""
if isinstance(btn, Dict):

View File

@@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
__version__ = "0.9"
__version__ = "1.0"
__author__ = 'Vocard Development, Choco'
__license__ = "MIT"
__copyright__ = "Copyright 2023 (c) Vocard Development, Choco"
@@ -34,3 +34,4 @@ from .objects import *
from .player import Player
from .pool import *
from .queue import *
from placeholders import Placeholders

View File

@@ -57,6 +57,7 @@ from .filters import Filter, Filters
from .objects import Track
from .pool import Node, NodePool
from .queue import Queue, FairQueue
from .placeholders import Placeholders
from random import shuffle
class Player(VoiceProtocol):
@@ -365,21 +366,50 @@ class Player(VoiceProtocol):
self.updating = False
async def build_embed(self):
track = self.current
if not track:
embed=Embed(title=self.get_msg("noTrackPlaying"), description=f"[Vote](https://top.gg/bot/605618911471468554/vote/) | [Support]({func.settings.invite_link}) | [Invite](https://discord.com/oauth2/authorize?client_id=605618911471468554&permissions=2184260928&scope=bot%20applications.commands) | [Questionnaire](https://forms.gle/UqeeEv4GEdCq9hi3A)", color=func.settings.embed_color)
embed.set_image(url='https://i.imgur.com/dIFBwU7.png')
if self.current:
raw = func.settings.controller.get("embeds", {}).get("active")
else:
try:
embed = Embed(color=func.settings.embed_color)
embed.set_author(name=self.get_msg("playerAuthor").format(self.channel.name), icon_url=self.client.user.avatar.url)
embed.description = self.get_msg("playerDesc").format(track.title, track.uri, (track.requester.mention if track.requester else "<@605618911471468554>"), (f"<@&{self.settings['dj']}>" if self.settings.get('dj') else f"{self.dj.mention}"))
embed.set_image(url=track.thumbnail if track.thumbnail else "https://cdn.discordapp.com/attachments/674788144931012638/823086668445384704/eq-dribbble.gif")
embed.set_footer(text=self.get_msg("playerFooter").format(self.queue.count, (self.get_msg("live") if track.is_stream else func.time(track.length)), self.volume, self.get_msg("playerFooter2").format(self.queue.repeat.capitalize()) if self.queue._repeat else ""))
except:
embed = Embed(description=self.get_msg("missingTrackInfo"), color=func.settings.embed_color)
raw = func.settings.controller.get("embeds", {}).get("inactive")
if not raw:
return
ph = Placeholders(self)
try:
embed = Embed()
if author := raw.get("author"):
embed.set_author(
name = ph.replace(author.get("name")),
url = ph.replace(author.get("url")),
icon_url = ph.replace(author.get("icon_url"))
)
if header := raw.get("header"):
embed.title = ph.replace(header.get("title"))
embed.url = ph.replace(header.get("url"))
if fields := raw.get("fields", []):
for f in fields:
embed.add_field(name=ph.replace(f.get("name")), value=ph.replace(f.get("value")))
if footer := raw.get("footer"):
embed.set_footer(
text = ph.replace(footer.get("text")),
icon_url = ph.replace(footer.get("icon_url"))
)
if thumbnail := raw.get("thumbnail"):
embed.set_thumbnail(url = ph.replace(thumbnail))
if image := raw.get("image"):
embed.set_image(url = ph.replace(image))
embed.description = ph.replace(raw.get("description"))
embed.color = int(ph.replace(raw.get("color")))
except:
embed = Embed(description=self.get_msg("missingTrackInfo"), color=func.settings.embed_color)
return embed
async def is_position_fresh(self):