유튜브 플러그인 예제


개요

  • 채팅내용이 뜨는곳 위에 div 를 생성하여 유튜브 띄울 자리를 마련합니다.
  • 관리권한이 부관리자 이상이 유저가 !youtube 주소 를 채팅방에 입력하면 모든 유저들의 div 에 유튜브가 보입니다.

 

사용된 API

 

소스


<script> // youtubePlay 플러그인
var uchat_youtube = {min_auth : 1}; // 플러그인 설정 부분입니다.
U.chat('*').on('after.create#youtube', function(room, data) { // youtubePlay 라는 아이디를 가지는 after.create 이벤트를 등록합니다./
    var dom = $('<div />').css({'position': 'absolute', 'top':0, left:0, right:0, zIndex:11}); // 유튜브가 표시될 객체입니다.
    var contentDom = room.skin.dom.content;//$('.middle .contentWrap', room.skin.document); // 스킨내부에서 대화가 보이는 부분을 가져옵니다.
    var channel = room.plugin.add('youtube'); // 채널을 가져옵니다.
    // install
    contentDom.append(dom); // dom 을 스킨 내부에 설치합니다.

    function isAble(auth) { // 최소한의 권한이 있는 자가 보내온것인지 확인하는 함수입니다.
        return uchat_youtube['min_auth'] <= auth;
    }

    function display(room, data) { // dom 에 youtube 를 설치하는 함수입니다.
        if(data.data) {
            var parse = /^(.{11})$/.exec(data.data[0]); // 데이터가 11자리이인지 검증합니다.
            if(parse) {
                if(isAble(data.user && data.user.auth)) { //유저의 권한이 잇는지 확인합니다.
                    var width = contentDom.width();
                    var height = contentDom.width()/16*9; // 높이는 16:9 로 설정됩니다.
                    dom.width(width).height(height).html('<iframe src="https://www.youtube.com/embed/'+parse.pop()+'" style="width:100%; height:100%;" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'); // 아이프레임을 dom 안에 설치합니다.
                }
            }
        }
    }

    function parseCommand(data) { // 채팅입력칸에서 보내는 내용을 감지합니다.
        if(data[0]) {
            var parse = /(https?:\/\/|\/\/)?(www\.)?youtu(be\.com|\.be)(\/\watch\?v\=|\/embed\/|\/)(.{11})/.exec(data[0]); // 정규식을 이용하여 youtube 주소 인지 판단합니다.
            if(parse) {
                if(isAble(room.my.auth)) { // 내 권한이 보낼 권한이 되는지 확인합니다.
                    channel.send(parse.pop()); // 채널에 전파합니다.
                }
            }
        } else { // 주소 없이 !youtube 만 실행됐을경우입니다.
            room.skin.popup.prompt('유튜브', '주소를 입력해주세요.', '', function( data ) { // 주소를 물어봅니다.
                if (data) { // 주소가 있다면
                    room.action.plugin('youtube', [data]); // plugin을 실행합니다.
                }
            });
        }
    }

    channel.onReceived(display); // 채널 listener 콜백함수를 등록해줍니다.
    channel.addParser(parseCommand);
    room.skin.menubar.add( { // menubar 에 메뉴를 추가합니다.
        id : 'youtube',
        title : '유튜브',
        html : '<div>유튜브</div>',
        condition:function( room, data ) {
            return isAble(room.my.auth);
        },
        onClick: function( room, data ) {
            room.action.plugin('youtube', []); // 빈주소가 들어오면 주소를 다시한번 더 물어보게 작동합니다. ( parser 에서 )
        }
    });
    room.on('after.join#youtube', function(room, data) { // 유저가 채팅방에 접속하면 플러그인이 작동한다는 사실을 알려줍니다.
        room.print('유튜브 플러그인 작동');
    });
});
</script>