All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hiczp.bilibili.api.live.socket.entity.DanMuMsgEntity Maven / Gradle / Ivy

There is a newer version: 0.2.0
Show newest version
package com.hiczp.bilibili.api.live.socket.entity;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Optional;

public class DanMuMsgEntity implements DataEntity {
    private static final Gson GSON = new Gson();
    private static final Type STRING_LIST_TYPE = new TypeToken>() {
    }.getType();

    /**
     * info : [[0,1,25,16777215,1520664535,1662637384,0,"88874b7b",0],"czpnb",[15723776,"Dough君",0,0,0,"10000",1,""],[],[10,0,9868950,">50000"],[],0,0,{"uname_color":""}]
     * cmd : DANMU_MSG
     */

    @SerializedName("cmd")
    private String cmd;
    @SerializedName("info")
    private JsonArray info;

    @Override
    public String getCmd() {
        return cmd;
    }

    public void setCmd(String cmd) {
        this.cmd = cmd;
    }

    public JsonArray getInfo() {
        return info;
    }

    public void setInfo(JsonArray info) {
        this.info = info;
    }

    /**
     * 弹幕池 (0 普通 1 字幕 2 特殊)
     */
    public int getPool() {
        return info.get(0).getAsJsonArray().get(0).getAsInt();
    }

    /**
     * 弹幕的模式 (1 普通 4 底端 5 顶端 6 逆向 7 特殊 9 高级)
     */
    public int getMode() {
        return info.get(0).getAsJsonArray().get(1).getAsInt();
    }

    /**
     * 字体大小
     */
    public int getFontSize() {
        return info.get(0).getAsJsonArray().get(2).getAsInt();
    }

    /**
     * 字体颜色
     */
    public int getColor() {
        return info.get(0).getAsJsonArray().get(3).getAsInt();
    }

    /**
     * 弹幕发送时间(Unix 时间戳)(其实是服务器接收到弹幕的时间)
     */
    public long getSendTime() {
        return info.get(0).getAsJsonArray().get(4).getAsInt();
    }

    /**
     * 用户进入房间的时间(Unix 时间戳)(但是 Android 发送的弹幕, 这个值会是随机数)
     */
    public String getUserEnterTime() {
        return info.get(0).getAsJsonArray().get(5).getAsString();
    }

    /**
     * 弹幕内容
     */
    public String getMessage() {
        return info.get(1).getAsString();
    }

    /**
     * 发送者的用户 ID
     */
    public long getUserId() {
        return info.get(2).getAsJsonArray().get(0).getAsLong();
    }

    /**
     * 发送者的用户名
     */
    public String getUsername() {
        return info.get(2).getAsJsonArray().get(1).getAsString();
    }

    /**
     * 发送者是否是管理员
     */
    public boolean isAdmin() {
        return info.get(2).getAsJsonArray().get(2).getAsBoolean();
    }

    /**
     * 发送者是否是 VIP
     */
    public boolean isVip() {
        return info.get(2).getAsJsonArray().get(3).getAsBoolean();
    }

    /**
     * 发送者是否是 SVip
     */
    public boolean isSVip() {
        return info.get(2).getAsJsonArray().get(4).getAsBoolean();
    }

    /**
     * 表示粉丝勋章有关信息的 JsonArray 可能是空的
     * 获取粉丝勋章等级
     */
    public Optional getFansMedalLevel() {
        if (info.get(3).getAsJsonArray().size() > 0) {
            return Optional.of(info.get(3).getAsJsonArray().get(0).getAsInt());
        } else {
            return Optional.empty();
        }
    }

    /**
     * 获取粉丝勋章名称
     */
    public Optional getFansMedalName() {
        if (info.get(3).getAsJsonArray().size() > 0) {
            return Optional.of(info.get(3).getAsJsonArray().get(1).getAsString());
        } else {
            return Optional.empty();
        }
    }

    /**
     * 粉丝勋章对应的主播的名字
     */
    public Optional getFansMedalOwnerName() {
        if (info.get(3).getAsJsonArray().size() > 0) {
            return Optional.of(info.get(3).getAsJsonArray().get(2).getAsString());
        } else {
            return Optional.empty();
        }
    }

    /**
     * 粉丝勋章对应的主播的直播间 ID
     */
    public Optional getFansMedalOwnerRoomId() {
        if (info.get(3).getAsJsonArray().size() > 0) {
            return Optional.of(info.get(3).getAsJsonArray().get(3).getAsString());
        } else {
            return Optional.empty();
        }
    }

    /**
     * 用户的观众等级
     */
    public int getUserLevel() {
        return info.get(4).getAsJsonArray().get(0).getAsInt();
    }

    /**
     * 用户的观众等级排名
     */
    public String getUserRank() {
        return info.get(4).getAsJsonArray().get(3).getAsString();
    }

    /**
     * 用户头衔
     */
    public List getUserTitles() {
        return GSON.fromJson(info.get(5), STRING_LIST_TYPE);
    }

    /**
     * 用户名颜色
     */
    public String getUsernameColor() {
        return info.get(8).getAsJsonObject().get("uname_color").getAsString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy