afreecachat

package module
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 17, 2024 License: MIT Imports: 13 Imported by: 1

README

AfreecaTV chat, Go library

공부용으로 제작하였습니다.

아프리카TV 채팅을 읽을 수 있는 Go 라이브러리입니다.

공식 API가 없기 때문에 임시로 제작하였으므로 언제든지 막히거나 수정될 가능성이 매우 높습니다.

아직 실력이 미숙하여 코드에 대한 부분들은 언제든지 이슈 및 PR로 남겨주시면 감사하겠습니다.

사용 방법

라이브러리 가져오기

go get -u https://github.com/devhalfdog/afreecachat

...

func main() {
    token := afreecachat.Token{
        BJID: {BJ ID},
        PdBoxTicket: {PdBoxTicket},
        FanTicket: {FanTicket},
        Flag: {Flag},
    }
    client, err := afreecachat.NewClient(token)
    if err != nil {
        // client 생성 중 에러가 발생할 경우
        // panic() 을 호출합니다.
        panic(err)
    }

    client.OnError(func(err error) {
        // 에러가 발생할 경우 에러를 출력합니다.
        fmt.Println(err)
    })

    client.OnChatMessage(func(message afreecachat.ChatMessage) {
        // 채팅 메시지가 있을 경우 ID, NAME, MESSAGE를 출력합니다.
        fmt.Printf("ID: %s, NAME: %s, MESSAGE: %s\n", message.User.ID, message.User.Name, message.Message)
    })

    // 채팅방 접속을 시도합니다.
    // 에러가 발생할 경우 panic()을 호출합니다.
    err := client.Connect()
    if err != nil {
        panic(err)
    }
}
Token
  • BJID (필수)
    • 자동으로 SocketAddressChatRoom을 가져오기 위한 BJ 아이디입니다.
  • Flag (필수)
    • 채팅 채널 연결에 필요한 유저 플래그 값
    • example: 524304
  • Identify
    • 채팅 채널 연결을 할 때 로그인 데이터
    • Identify.IDIdentify.Password의 값이 있을 경우 자동으로 로그인을 진행합니다.
    • 입력하지 않을 경우 비로그인으로 채팅 채널에 연결합니다.
Callback
  • OnError(error)
    • 에러가 발생할 경우 에러를 반환합니다.
  • OnConnect(bool)
    • 채널 입장 Handshake가 성공하면 true를 반환합니다.
  • OnRawMessage(string)
    • 원본 데이터 문자열을 반환합니다.
  • OnChatMessage(ChatMessage)
    • 채팅 메시지가 있을 때마다 ChatMessage 구조체를 반환합니다.
  • OnUserLists([]UserList)
    • 유저 입장/퇴장 메시지가 있을 때마다 []UserList 구조체를 반환합니다.
  • OnBalloon(Balloon)
    • 별풍선 메시지가 있을 때마다 Balloon 구조체를 반환합니다.
  • OnAdballoon(Adballoon)
    • 애드벌룬 메시지가 있을 때마다 Adballoon 구조체를 반환합니다.
  • OnSubscription(Subscription)
    • 구독 메시지가 있을 때마다 Subscription 구조체를 반환합니다.
  • OnAdminNotice(string)
    • 운영자 알림 메시지가 있을 때마다 문자열을 반환합니다.
    • example: "{BJ NAME}님의 방송이 별별랭킹의 '웃음이 끊이지 않는 방송' 1위에 등극!"
예제
  • 별풍선을 받을 때마다 Warudo OSC 통신 예제 문서

TODO

아래에 작성된 순서는 개발 순서가 아닌 생각난 대로 작성하였습니다.

  • 에러 처리
    • "\x1b\t000100005807\f시스템 에러가 발생 했습니다. (중복 세션)\f"
  • 비밀방 접속
  • 스티커를 받았을 때 콜백
  • 코드 최적화
  • 테스트 파일 작성
  • 회원일 경우 플래그 설정
  • 로그인
    • 연령제한 방송에 접근하기 위해서는 인증된 계정 토큰이 필요함.

레퍼런스

Documentation

Index

Constants

View Source
const (
	SVC_KEEPALIVE             = 0 /* pingpong */
	SVC_LOGIN                 = 1 /* 로그인 핸드쉐이크 */
	SVC_JOINCH                = 2 /* 채널 입장 핸드쉐이크 */
	SVC_QUITCH                = 3 /* 강제 퇴장 */
	SVC_CHUSER                = 4 /* 입장/퇴장 */
	SVC_CHATMESG              = 5
	SVC_SETCHNAME             = 6
	SVC_SETBJSTAT             = 7
	SVC_SETDUMB               = 8 /* 채금 */
	SVC_DIRECTCHAT            = 9
	SVC_NOTICE                = 10 /* 사용하지 않음 */
	SVC_KICK                  = 11 /* 사용하지 않음 */
	SVC_SETUSERFLAG           = 12
	SVC_SETSUBBJ              = 13
	SVC_SETNICKNAME           = 14
	SVC_SVRSTAT               = 15 /* 사용하지 않음 */
	SVC_NULL_16               = 16 /* 사용하지 않음 */
	SVC_CLUBCOLOR             = 17
	SVC_SENDBALLOON           = 18 /* 별풍선 */
	SVC_ICEMODE               = 19 /* 얼음 */
	SVC_SENDFANLETRTRER       = 20
	SVC_ICEMODE_EX            = 21
	SVC_GET_ICEMODE_RELAY     = 22 /* 사용하지 않음 */
	SVC_SLOWMODE              = 23
	SVC_RELOADBURNLEVEL       = 24 /* 사용하지 않음 */
	SVC_BLINDKICK             = 25 /* 사용하지 않음 */
	SVC_MANAGERCHAT           = 26 /* 매니저 채팅, 읽을 수 있는 권리는 매니저 flag 이상만 */
	SVC_APPENDDATA            = 27 /* 사용하지 않음 */
	SVC_BASEBALLEVENT         = 28 /* 사용하지 않음 */
	SVC_PAIDITEM              = 29 /* 사용하지 않음 */
	SVC_TOPFAN                = 30 /* 사용하지 않음 */ /* 열혈? */
	SVC_SNSMESSAGE            = 31 /* 사용하지 않음 */
	SVC_SNSMODE               = 32 /* 사용하지 않음 */
	SVC_SENDBALLOONSUB        = 33
	SVC_SENDFANLETRTRERSUB    = 34
	SVC_TOPFANSUB             = 35 /* 사용하지 않음 */
	SVC_BJSTICKERITEM         = 36 /* 사용하지 않음 */
	SVC_CHOCOLATE             = 37
	SVC_CHOCOLATESUB          = 38
	SVC_TOPCLAN               = 39 /* 사용하지 않음 */
	SVC_TOPCLANSUB            = 40 /* 사용하지 않음 */
	SVC_SUPERCHAT             = 41 /* 사용하지 않음 */
	SVC_UPDATETICKET          = 42 /* 사용하지 않음 */
	SVC_NOTIGAMERANKER        = 43 /* 사용하지 않음 */
	SVC_STARCOIN              = 44
	SVC_SENDQUICKVIEW         = 45
	SVC_ITEMSTATUS            = 46 /* 사용하지 않음 */
	SVC_ITEMUSING             = 47
	SVC_USEQUICKVIEW          = 48
	SVC_NOTIFY_POLL           = 50 /* 투표 */
	SVC_CHATBLOCKMODE         = 51 /* 사용하지 않음 */
	SVC_BDM_ADDBLACKINFO      = 52 /* 블랙리스트..? */
	SVC_SETBROADINFO          = 53 /* 사용하지 않음 */
	SVC_BAN_WORD              = 54
	SVC_SENDADMINNOTICE       = 58 /* 어드민 메시지 */
	SVC_FREECAT_OWNER_JOIN    = 65
	SVC_BUYGOODS              = 70
	SVC_BUYGOODSSUB           = 71
	SVC_SENDPROMOTION         = 72 /* 사용하지 않음 */
	SVC_NOTIFY_VR             = 74
	SVC_NOTIFY_MOBBROAD_PAUSE = 75
	SVC_KICK_AND_CANCEL       = 76
	SVC_KICK_USERLIST         = 77
	SVC_ADMIN_CHUSER          = 78
	SVC_CLIDOBAEINFO          = 79
	SVC_VOD_BALLOON           = 86
	SVC_ADCON_EFFECT          = 87
	SVC_SVC_KICK_MSG_STATE    = 90
	SVC_FOLLOW_ITEM           = 91 /* 신규 구독 */
	SVC_ITEM_SELL_EFFECT      = 92
	SVC_FOLLOW_ITEM_EFFECT    = 93 /* 연속 구독 */
	SVC_TRANSLATION_STATE     = 94
	SVC_TRANSLATION           = 95
	SVC_GIFT_TICKET           = 102
	SVC_VODADCON              = 103
	SVC_BJ_NOTICE             = 104 /* BJ 공지 */
	SVC_VIDEOBALLOON          = 105
	SVC_STATION_ADCON         = 107
	SVC_SENDSUBSCRIPTION      = 108 /* 구독권 선물 */
	SVC_OGQ_EMOTICON          = 109
	SVC_ITEM_DROPS            = 111
	SVC_VIDEOBALLOON_LINK     = 117 /* 사용하지 않음 */
	SVC_OGQ_EMOTICON_GIFT     = 118 /* OGQ 이모티콘 선물 */
	SVC_AD_IN_BROAD_JSON      = 119
	SVC_GEM_ITEMSEND          = 120
	SVC_MISSION               = 121 /* 도전 미션 ? */
	SVC_LIVE_CAPTION          = 122
	SVC_MISSION_SETTLE        = 125
	SVC_SET_ADMIN_FLAG        = 126
)

Reference : https://github.com/wakscord/afreeca

Variables

This section is empty.

Functions

This section is empty.

Types

type Adballoon

type Adballoon struct {
	User  User
	Count int // 애드벌룬 갯수
}

type Balloon

type Balloon struct {
	User  User
	Count int // 별풍선 갯수
}

type ChatMessage

type ChatMessage struct {
	User    User
	Message string // 채팅
}

type Client

type Client struct {
	Token Token
	// contains filtered or unexported fields
}

func NewClient

func NewClient(token Token) (*Client, error)

NewClient 함수는 Client 구조체를 초기화하여 생성한다.

func (*Client) Connect

func (c *Client) Connect(password ...string) error

Connect 메서드는 채팅 서버 연결에 필요한 과정을 수행한다.

func (*Client) OnAdballoon

func (c *Client) OnAdballoon(callback func(adballoon Adballoon))

OnAdballoon 메서드는 애드벌룬 데이터를 전달한다.

func (*Client) OnAdminNotice added in v0.0.5

func (c *Client) OnAdminNotice(callback func(message string))

OnAdminNotice 메서드는 운영자 알림 데이터를 전달한다.

func (*Client) OnBalloon

func (c *Client) OnBalloon(callback func(balloon Balloon))

OnBalloon 메서드는 별풍선 데이터를 전달한다.

func (*Client) OnChatMessage

func (c *Client) OnChatMessage(callback func(message ChatMessage))

OnChatMessage 메서드는 채팅 메시지가 왔을 때 데이터를 전달한다.

func (*Client) OnConnect

func (c *Client) OnConnect(callback func(connect bool))

OnConnect 메서드는 서버와 연결에 관한 데이터를 전달한다.

func (*Client) OnError added in v0.0.5

func (c *Client) OnError(callback func(err error))

func (*Client) OnJoinChannel

func (c *Client) OnJoinChannel(callback func(join bool))

OnJoinChannel 메서드는 채널 접속에 관한 데이터를 전달한다.

func (*Client) OnRawMessage

func (c *Client) OnRawMessage(callback func(message string))

OnRawMessage 메서드는 메시지 원문 데이터를 전달한다.

func (*Client) OnSubscription

func (c *Client) OnSubscription(callback func(subscription Subscription))

OnSubscription 메서드는 구독 데이터를 전달한다.

func (*Client) OnUserLists

func (c *Client) OnUserLists(callback func(userlist []UserList))

OnUserLists 메서드는 유저 입장/퇴장 데이터를 전달한다.

func (*Client) SendChatMessage

func (c *Client) SendChatMessage(message string) error

SendChatMessage 메서드는 채팅 채널에 채팅 데이터를 전송한다. 메시지를 보낼 때 실패한 경우 에러를 반환한다.

func (*Client) SetInfoHandshake

func (c *Client) SetInfoHandshake(info Info) []byte

SetInfoHandshake 메서드는 Handshake 과정 중 필요한 Info 데이터를 가공한다.

func (*Client) SetLogHandshake

func (c *Client) SetLogHandshake(log Log) []byte

SetLogHandshake 메서드는 Handshake 과정 중 필요한 Log 데이터를 가공한다.

type Flag1

type Flag1 struct {
	Admin          bool // 관리자
	Hidden         bool // 아이디 숨김
	BJ             bool // 방장
	Dumb           bool // 벙어리
	Guest          bool // 비회원
	Fanclub        bool // 팬클럽
	AutoManager    bool // 고정 매니저
	ManagerList    bool // 매니저 리스트
	Manager        bool // 매니저
	Female         bool // 여자 아니면 남자
	AutoDumb       bool // 자동 벙어리
	DumbBlind      bool // 벙어리 블라인드
	DobaeBlind     bool // 도배 블라인드
	DobaeBlind2    bool // 도배 블라인드 2
	ExitUser       bool // 나간 사람
	Mobile         bool // 모바일 유저
	TopFan         bool // 열혈
	Realname       bool // 실명인증
	NoDirect       bool // 1:1 직접 채팅 금지
	GlobalApp      bool // 글로벌 앱
	QuickView      bool // 퀵뷰 유저
	SptrSticker    bool // 스티커 서포터
	Chromecast     bool // 크롬 캐스트
	Follower       bool // 구독자
	NotiVodBalloon bool // VOD 별풍 알림?
	NotiTopFan     bool // 열혈 알림?
}

type Flag2

type Flag2 struct {
	GlobalPC    bool
	Clan        bool
	TopClan     bool
	Top20       bool
	GameGod     bool
	ATagAllow   bool
	NoSuperChat bool
	NoRecvChat  bool
	Flash       bool
	LGGame      bool
	Employee    bool
	CleanAti    bool
	Police      bool
	AdminChat   bool
	PC          bool
	Specify     bool
}

type Identifier added in v0.0.6

type Identifier struct {
	ID       string
	Password string
}

type Info

type Info struct {
	Password string `json:"pwd"`
	AuthInfo string `json:"auth_info"`
}

func DefaultInfo

func DefaultInfo(password string) Info

DefaultInfo 함수는 채팅 서버 연결에 필요한 Handshake 데이터 중 미리 초기화된 Info 데이터를 반환한다.

type Log

type Log struct {
	SetBps          string `json:"set_bps"`
	ViewBps         string `json:"view_bps"`
	Quality         string `json:"quality"`
	GeoContryCode   string `json:"geo_cc"`
	GeoRegionCode   string `json:"geo_rc"`
	AcceptLanguage  string `json:"acpt_lang"`
	ServiceLanguage string `json:"svc_lang"`
	JoinContryCode  string `json:"join_cc"`
	Subscribe       string `json:"subscribe"`
}

func DefaultLog

func DefaultLog() Log

DefaultLog 함수는 채팅 서버 연결에 필요한 Handshake 데이터 중 미리 초기화된 Log 데이터를 반환한다.

type Subscription

type Subscription struct {
	User  User
	Count int // 구독 개월 수
}

type Token

type Token struct {
	BJID       string
	Identifier Identifier
	Flag       string
	// contains filtered or unexported fields
}

type User

type User struct {
	ID             string // 유저 아이디
	Name           string // 유저 닉네임
	SubscribeMonth int    // 구독 개월
	Flag           UserFlag
}

type UserFlag

type UserFlag struct {
	Flag1 Flag1
	Flag2 Flag2
}

type UserList

type UserList struct {
	User   User
	Status bool // 입장 true, 퇴장 false
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL