Player & Manager

Tìm hiểu cách sử dụng PlayerManager để quản lý players và Player để điều khiển phát nhạc trong Discord bot của bạn.

Multi-source Support

Hỗ trợ nhiều nguồn âm thanh thông qua hệ thống plugin

  • YouTube
  • SoundCloud
  • Spotify
  • Direct URLs
  • Playlists

Rich Configuration

Cấu hình linh hoạt cho từng player và manager

  • Volume control
  • Auto-leave
  • Queue limits
  • User data

Event-driven

Hệ thống events mạnh mẽ để tương tác với player

  • Track events
  • Queue events
  • Error handling
  • State changes

PlayerManager

PlayerManager là trung tâm quản lý tất cả players trong bot của bạn. Nó cho phép bạn tạo, cấu hình và quản lý nhiều players cho các guild khác nhau.

1import { PlayerManager } from "ziplayer";
2import { SoundCloudPlugin, YouTubePlugin, SpotifyPlugin } from "@ziplayer/plugin";
3
4const manager = new PlayerManager({
5  plugins: [
6    new SoundCloudPlugin(), 
7    new YouTubePlugin(), 
8    new SpotifyPlugin()
9  ],
10  // Cấu hình tùy chọn
11  defaultVolume: 50,
12  maxQueueSize: 100,
13  leaveOnEmpty: true,
14  leaveOnEmptyCooldown: 30000,
15});

Tính năng chính

  • Quản lý nhiều players cho các guild khác nhau
  • Tự động cleanup players không hoạt động
  • Hỗ trợ plugin system mạnh mẽ
  • Cấu hình mặc định cho tất cả players

API Methods

create(guildId, options)

Tạo player mới cho guild

get(guildId)

Lấy player theo guild ID

destroy(guildId)

Xóa player khỏi manager

Player

Player là đối tượng chính để điều khiển phát nhạc trong một guild. Mỗi guild có thể có một player riêng biệt.

Tạo Player

1const player = manager.create(guildId, {
2  // Cấu hình player
3  leaveOnEnd: true,
4  leaveTimeout: 30000,
5  userdata: { 
6    channel: textChannel,
7    guild: guild 
8  },
9  extensions: ["voiceExt"],
10  // Cấu hình queue
11  queue: {
12    autoPlay: false,
13    shuffle: false,
14    repeat: "off"
15  }
16});

Sử dụng Player

1// Kết nối voice channel
2await player.connect(voiceChannel);
3
4// Phát nhạc
5await player.play("Never Gonna Give You Up", userId);
6await player.play("https://www.youtube.com/watch?v=dQw4w9WgXcQ", userId);
7
8// Điều khiển phát nhạc
9player.pause();
10player.resume();
11player.stop();
12player.skip();
13player.loop("off); //"off" | "track" | "queue"
14
15// Điều khiển volume
16player.setVolume(75);
17
18// Thoát khỏi voice channel
19player.destroy();

Events

1// Lắng nghe events
2player.on("trackStart", (player, track) => {
3  console.log("Bắt đầu phát:", track.title);
4});
5
6player.on("trackEnd", (player, track) => {
7  console.log("Kết thúc:", track.title);
8});
9
10player.on("queueEnd", (player) => {
11  console.log("Hết queue, tự động thoát...");
12});
13
14player.on("error", (player, error) => {
15  console.error("Lỗi player:", error);
16});
17
18/* Player Events
19	debug: [message: string, ...args: any[]];
20	willPlay: [track: Track, upcomingTracks: Track[]];
21	trackStart: [track: Track];
22	trackEnd: [track: Track];
23	queueEnd: [];
24	playerError: [error: Error, track?: Track];
25	connectionError: [error: Error];
26	volumeChange: [oldVolume: number, newVolume: number];
27	queueAdd: [track: Track];
28	queueAddList: [tracks: Track[]];
29	queueRemove: [track: Track, index: number];
30	playerPause: [track: Track];
31	playerResume: [track: Track];
32	playerStop: [];
33	playerDestroy: [];
34	ttsStart: [payload: { text?: string; track?: Track }];
35	ttsEnd: [];
36*/
37

Best Practices

Memory Management

  • Sử dụng leaveOnEnd để tự động thoát khi hết nhạc
  • Đặt leaveTimeout hợp lý (30-60 giây)
  • Xóa players không sử dụng bằng destroy()

Error Handling

  • Luôn xử lý lỗi khi connect và play
  • Sử dụng try-catch cho các async operations
  • Lắng nghe error events để debug

Tiếp theo: Queue & Controls

Tìm hiểu cách sử dụng queue system và các điều khiển phát nhạc nâng cao.

Xem Queue & Controls