Events & Listeners

Tìm hiểu cách sử dụng hệ thống events mạnh mẽ của ZiPlayer để tương tác với player và tạo trải nghiệm người dùng phong phú.

Playback Events

Theo dõi trạng thái phát nhạc

  • trackStart
  • trackEnd
  • playerPause
  • playerResume
  • playerStop

Queue Events

Quản lý danh sách phát

  • queueAdd
  • queueRemove
  • queueAddList
  • willPlay
  • queueEnd

Control Events

Điều khiển player

  • volumeChange
  • playerDestroy

Error Events

Xử lý lỗi và sự cố

  • playerError
  • connectionError

Events Cơ Bản

Các events cơ bản để theo dõi trạng thái phát nhạc và tương tác với player.

1// Lắng nghe các events cơ bản
2player.on("trackStart", (track) => {
3  console.log("Bắt đầu phát:", track.title);
4});
5
6player.on("trackEnd", (track) => {
7  console.log("Kết thúc:", track.title);
8});
9
10player.on("queueEnd", () => {
11  console.log("Hết queue, tự động thoát...");
12});
13
14player.on("playerPause", (track) => {
15  console.log("Tạm dừng:", track.title);
16});
17
18player.on("playerResume", (track) => {
19  console.log("Tiếp tục:", track.title);
20});
1// Events liên quan đến queue
2player.on("queueAdd", (track) => {
3  console.log("Thêm vào queue:", track.title);
4});
5
6player.on("queueAddList", (tracks) => {
7  console.log("Thêm playlist:", tracks.length, "bài hát");
8});
9
10player.on("queueRemove", (track, index) => {
11  console.log("Xóa khỏi queue:", track.title, "tại vị trí", index);
12});
13
14player.on("willPlay", (track, tracks) => {
15  console.log("Sắp phát:", track.title);
16  console.log("Còn lại:", tracks.length, "bài hát");
17});
1// Xử lý lỗi
2player.on("playerError", (error, track) => {
3  console.error("Lỗi phát nhạc:", error.message);
4  console.error("Bài hát:", track?.title || "Unknown");
5  
6  // Có thể thử phát bài tiếp theo
7  if (player.queue.length > 0) {
8    player.queue.skip();
9  }
10});
11
12player.on("connectionError", (error) => {
13  console.error("Lỗi kết nối:", error.message);
14  
15  // Thử kết nối lại sau 5 giây
16  setTimeout(() => {
17    player.connect(voiceChannel).catch(console.error);
18  }, 5000);
19});