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

# 最佳音乐 ID - Hub
一个面向 Roblox executor 的社交音乐 ID 中心:发布、发现、收听、点赞、关注并整理官方 Roblox 音频 ID —— 包含播放列表、排行榜、个人资料以及实时的 key 系统,所有这些都封装在定制的 UI 中。
```
loadstring(game:HttpGet("https://raw.githubusercontent.com/DudxJs/ExploitUniverseStudio/refs/heads/main/TheBestMusicIDs"))()
```



##
目录
- [关于](#-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)** 开发和维护。
如果你喜欢这个项目,考虑在仓库上留一个 
