DudxJs/TheBestMusicIDs-Hub

GitHub: DudxJs/TheBestMusicIDs-Hub

面向 Roblox executor 的社交音乐 ID 中心脚本,提供音乐发布、播放列表、点赞关注和排行榜等功能,后端基于 Supabase 实现数据实时同步。

Stars: 1 | Forks: 0

![The Best Music ID's - Hub](https://github.com/DudxJs/TheBestMusicIDs-Hub/blob/main/assets/TheBestMusicIDs.png) # 最佳音乐 ID - Hub 一个面向 Roblox executor 的社交音乐 ID 中心:发布、发现、收听、点赞、关注并整理官方 Roblox 音频 ID —— 包含播放列表、排行榜、个人资料以及实时的 key 系统,所有这些都封装在定制的 UI 中。 ``` loadstring(game:HttpGet("https://raw.githubusercontent.com/DudxJs/ExploitUniverseStudio/refs/heads/main/TheBestMusicIDs"))() ``` ![Version](https://img.shields.io/badge/version-3.6-blueviolet) ![Status](https://img.shields.io/badge/status-active-brightgreen) ![Made with](https://img.shields.io/badge/made%20with-Lua-blue) ## 目录 - [关于](#-about) - [功能](#-features) - [工作原理](#-how-it-works) - [教程](#tutorials) - [音乐版块](#music-section) - [如何发布歌曲](#how-to-publish-a-song) - [编辑你发布的音乐](#edit-your-published-music) - [收听已发布的音乐(你的或其他用户的)](#listen-to-the-music-posted-yours-or-another-users) - [为歌曲点赞](#like-a-song) - [报告损坏/封禁的 ID](#report-a-broken--banned-id) - [播放列表版块](#playlists-section) - [如何获取播放列表 ID](#how-to-get-the-playlist-id) - [如何创建播放列表](#how-to-create-a-playlist) - [向你的播放列表添加歌曲](#add-songs-to-your-playlist) - [在你自己的脚本中使用播放列表](#using-a-playlist-in-your-own-scripts) - [个人资料版块](#profile-section) - [关注/取消关注玩家](#follow--unfollow-players) - [排行榜(前 10 名)](#leaderboard-top-10) - [主页版块](#home-section) - [Key 系统](#-key-system) - [音频状态系统](#-audio-status-system) - [项目架构](#-project-architecture) - [更新日志](#-changelog) - [免责声明](#-disclaimer) - [Executor](#-executors) - [Delta Android](#delta-android) - [Delta iOS](#delta-ios) - [Madium PC](#madium-pc) - [致谢](#-credits) ## 关于 [TheBestMusicIDs](#the-best-music-ids---hub) 不仅仅是一个脚本 —— 它是一个用于 Roblox 音频 ID 的迷你社交网络,完全使用定制的 Lua UI 构建(没有使用 Roblox Studio,也没有使用外部 GUI 库)。它允许任何玩家: - 发布和分享**官方 Roblox 音频 ID**(该脚本绝不会托管或播放自定义/盗版的音频文件 —— 仅限存在于真实 Roblox 目录中的 ID); - 浏览、过滤、搜索和排序所有人的提交内容; - 通过内置的圆形可视化音频播放器收听; - 点赞、关注,并攀登全球排行榜; - 将歌曲整理到公开播放列表中,甚至可以被**其他脚本**调用。 该界面是完全定制的:浮动面板、动态 RGB 描边、带有滚动渐隐效果的标签页系统、启动画面、主页上的更新日志卡片等等 —— 全部是在 Roblox 原生 UI 实例的基础上从零开始构建的。 ## 功能 | 类别 | 你能得到什么 | |---|---| | 🎵 **音乐发布** | 发布任何有效的 Roblox 音频 ID,在确认前可设置名称、类别并进行预览 | | ✏️ **编辑** | 随时编辑你自己发布的歌曲(名称、类别、ID) | | 🎧 **音频播放器** | 带有圆形可视化效果、交互式时间轴和粒子效果的自定义播放器 | | ❤️ **点赞** | 为任何歌曲点赞/取消点赞;点赞数将影响排序和排行榜 | | 👥 **关注系统** | 关注/取消关注玩家,查看关注者/正在关注列表 | | 🏆 **排行榜** | 基于点赞和社区互动的全球前 10 名排名 | | 📁 **播放列表** | 创建播放列表,添加/删除歌曲,通过播放列表 ID 分享,并支持外部调用 | | 🔎 **搜索与过滤** | 按名称、类别、玩家或 ID 搜索;按最新/最旧或最多点赞排序 | | 🚨 **损坏 ID 检测** | 自动检测被封禁/私密的音频,带有视觉横幅和社区驱动的报告机制 | | 🔐 **Key 系统** | 在发布、编辑或创建播放列表之前,需要完成防滥用的 key 验证 | | 🏠 **主页/更新日志** | 应用内更新日志,带有分类的更新卡片(新增/移除/修复) | | 🛡️ **防直接运行保护** | 核心模块拒绝运行,除非通过官方 loader 加载 | ## 工作原理 该脚本使用**模块化 loader 架构**。当你运行上面的 loadstring 时,它会: 1. 从 GitHub **按顺序**下载并执行每个模块,并报告进度(用于驱动启动画面); 2. 一旦每个模块成功加载,便启动主 GUI。 ``` config.lua → constants, icons, colors, Supabase & Key System URLs, global cache/state core.lua → pure utility functions (buttons, switches, panels, formatting, etc.) api.lua → Supabase requests: likes, follows, playlists, pagination, Roblox user lookups audio_player.lua → the audio player screen (visualizer, timeline) ui_components.lua → reusable UI: splash screen, key system panel, music cards, playlist modals id_change_system.lua → ID editing, ID validation, and broken-audio reporting queue profile.lua → user profile, leaderboard calculation, playlists, follow lists music_list.lua → publish flow, music feed, filters/search, sorting main_gui.lua → main interface, tab system, Home page, entry point (main()) ``` 所有数据(音乐条目、点赞、关注、播放列表)都存储在 **Supabase** 后端中,并通过 `api.lua` 进行读写,因此你发布的所有内容都会实时对该脚本的所有其他用户可见。 在内部,没有任何共享状态会触及 `_G` —— loader 会将一个私有 table 传递给 `main.lua`,后者再将其作为普通的函数参数传递给每个模块。在同一 executor 中运行的其他脚本无法看到或访问该脚本内部状态的任何内容。 ## 教程 关于如何使用 [TheBestMusicIDs](#the-best-music-ids---hub) 脚本的基础教程。 ### 音乐版块 #### 如何发布歌曲 1. 准备好歌曲 ID。 2. 转到 **"Publish"**(发布)标签页。 3. 填写所需的信息(ID、名称、类别)。 4. 点击 **"Publish Music"**(发布音乐)。 5. 确认显示的预览确实是你想要发布的歌曲。 6. 完成 [Key 系统](#key-system) 以完成发布。 #### 编辑你发布的音乐 1. 点击你已[发布](#how-to-publish-a-song)的歌曲旁边的三个点 (`⋯`)。 2. 将打开一个包含该歌曲可编辑字段的面板。 3. 进行更改,然后点击 **"Save changes"**(保存更改)。 4. 完成 [Key 系统](#key-system) 以确认编辑。 #### 收听已发布的音乐(你的或其他用户的) 1. 点击所需歌曲旁边的三个点 (`⋯`)。 2. 选择 **"Listen to Music"**(收听音乐)。 3. 将打开一个专用的音频播放器,带有圆形可视化效果和交互式时间轴 —— 可以自由播放、暂停、跳转和重新开始。 #### 为歌曲点赞 1. 点击任何歌曲卡片上的 图标。 2. 你的点赞将立即保存,并有助于提升该歌曲的排名和发布者的排行榜得分。 3. 再次点击以取消点赞。 #### 报告损坏/封禁的 ID - 脚本会自动检查每个音频的状态(OK / 封禁 / 私密),并在检测到问题时在歌曲卡片上显示彩色横幅。 - 当任何玩家遇到损坏的 ID 时,脚本会在后台安静地报告它(带有节流和重试机制),从而使列表对所有人保持准确 —— 无需手动操作。 ### 播放列表版块 该脚本可以创建播放列表,而且**你也可以在你自己的脚本中调用它们**。 ``` local TMI = loadstring(game:HttpGet('https://raw.githubusercontent.com/DudxJs/ExploitUniverseStudio/refs/heads/main/TheBestMusicIDs'))() local songs = TMI:GetPlaylist("PLAYLIST_ID_HERE") for _, song in ipairs(songs) do print(song.id, song.name, song.category, song.status) end ``` #### 如何获取播放列表 ID 1. 在脚本中访问所需玩家的**个人资料**。 2. 转到 **"Playlists"**(播放列表)版块。 3. 打开该玩家的**公开播放列表**。 4. 点击三个点 (`⋯`) 并选择 **"Share"**(分享)以复制播放列表 ID。 #### 如何创建播放列表 1. 访问你**自己的**个人资料。 2. 转到 **"Playlists"**(播放列表)版块。 3. 点击 **"Create New Playlist"**(创建新播放列表)并填写其名称/详细信息。 4. 完成 **Key 系统** 以发布你的播放列表。 #### 向你的播放列表添加歌曲 1. 点击所需歌曲旁边的三个点 (`⋯`)。 2. 选择 **"Add to Playlist"**(添加到播放列表)。 3. 选择你要将歌曲添加到的播放列表。 #### 在你自己的脚本中使用播放列表 如上所示,在 loadstring 返回的对象上调用 `TMI:GetPlaylist("PLAYLIST_ID_HERE")`。它不会打开 GUI,而是返回一个包含歌曲(`id`、`name`、`category`、`status`)的普通 Lua table,你可以在自己的代码中遍历它 —— 这对于构建自定义点唱机、自动播放器等非常有用。 调用 `GetPlaylist` 会阻止 GUI 自动打开 —— 这不会改变你加载脚本的方式。如果你不调用它,`loadstring(...)()` 的行为与本 README 顶部的一行代码完全一样,会正常打开界面,无需额外的调用。 ### 个人资料版块 #### 关注/取消关注玩家 - 访问任何玩家的个人资料并点击 **Follow**(关注)/**Unfollow**(取消关注)。 - 从个人资料标签页中查看完整的 **Followers**(关注者)和 **Following**(正在关注)列表。 #### 排行榜(前 10 名) - **"Top 10"**(前 10 名)标签页根据玩家发布的歌曲所获得的点赞数进行排名。 - 当前的第一名玩家会在整个界面中以特殊的徽章高亮显示。 ### 主页版块 **Home**(主页)标签页显示: - 包含最新更新的更新日志,分类为 **Added**(新增)、**Removed**(移除)或 **Fixed**(修复),每个都有其对应的图标/颜色; - 脚本作者/贡献者的致谢部分。 ## Key 系统 为了防止垃圾信息和滥用,任何写入数据的操作(**发布**、**编辑**、**创建播放列表**)都需要在发送请求之前完成 **Key 系统**验证。所有这些流程都复用了同一个 key 面板,因此体验始终保持一致。 ## 音频状态系统 每个歌曲 ID 都会定期对照 Roblox 进行验证。状态按会话缓存,因此同一个 ID 不会被重复检查,并直接显示在每个音乐卡片上: | 状态 | 含义 | 横幅 | |---|---|---| | ✅ `ok` | 音频正常播放 | 无 | | 🚫 `banned` | 音频已被下架/不存在 | 红色横幅 | | 🔒 `private` | 音频存在但不公开 | 黄色横幅 | 任何遇到状态变化的玩家都会在后台向共享数据库提供更新,从而使列表对整个社区保持准确,而无需版主干预。 单次检查永远不足以将歌曲从 `banned`/`private` 翻转回 `ok` —— 脚本要求该问题至少存在 30 分钟,然后每隔几秒钟连续确认两次 `ok`,再将其写回数据库。这可以防止由于一次性的网络波动而导致状态来回切换。 ## 项目架构 ``` TheBestMusicIDs (loader) └─ main.lua — orchestrates module loading, order & error reporting ├─ security/config.lua — constants, icons, colors, cache/state ├─ core.lua — utility functions (buttons, panels, formatting) ├─ security/api.lua — Supabase + Key System requests ├─ ui/audio_player.lua — audio player screen ├─ ui/ui_components.lua — reusable UI building blocks ├─ ui/id_change_system.lua — ID editing & broken-audio reporting ├─ ui/profile.lua — profile, leaderboard, playlists ├─ data/music_list.lua — publishing, feed, filters, search └─ ui/main_gui.lua — main interface, tabs, entry point ``` `main.lua` 会**拒绝运行**,除非它是通过官方 loader(`TheBestMusicIDs`)调用的,该 loader 会将其自身的 loader 接口作为普通函数参数传递进来。没有可以伪造的全局标志 —— 直接使用 `loadstring(mainLuaSource)()` 根本接收不到参数,并且会被屏幕上的警告拦截,提示玩家使用 loader。 每个模块都以相同的方式接收共享的 `TMI` table:作为函数参数,而不是通过 `_G`。这使得所有内部状态 —— 包括 Key 系统的钥和 Supabase 凭据 —— 对同一 executor 中运行的其他任何脚本都是不可见的。 ## 更新日志 ## 免责声明 - 该脚本仅引用平台上已有的**官方 Roblox 音频 ID**。它不托管、上传或流式传输任何第三方/自定义的音频文件。 - 使用外部脚本/executor 须遵守 Roblox 的服务条款。使用风险自负。 ## Executor ### Delta Android 点击[下载](https://deltaexploits.gg/delta-executor-android) ### Delta iOS 点击[下载](https://deltaexploits.gg/delta-executor-ios) ### Madium PC 点击[下载](https://getmadium.net/) ## 致谢 由 **[DudxJs](https://github.com/DudxJs)** 开发和维护。 如果你喜欢这个项目,考虑在仓库上留一个