Мы создали этот удобный модуль чата Twitch в прямом эфире на Twitch для Coding Cafe!
Особая благодарность: Comfy.JS возможен благодаря tmi.js, поддерживаемому @AlcaDesign.
Comfy.JS позволяет СУПЕР ПРОСТО интегрироваться с чатом Twitch для вашего канала Twitch, всего за несколько строк кода. Вот краткое трехминутное видео о том, как его использовать: (Нажмите на изображение, чтобы открыть видео)
Нравятся эти проекты? Лучший способ поддержать мои проекты с открытым исходным кодом — стать спонсором Comfy на GitHub!
https://github.com/sponsors/instafluff
Приходите и общайтесь с нами в Comfiest Corner на Twitch!
https://twitch.tv/instafluff
comfy.js
npm install comfy.js --save
var ComfyJS = require ( "comfy.js" ) ;
ComfyJS . onCommand = ( user , command , message , flags , extra ) => {
if ( flags . broadcaster && command === "test" ) {
console . log ( "!test was typed in chat" ) ;
}
}
ComfyJS . Init ( "MyTwitchChannel" ) ;
comfy.js
из папки dist
или включите из CDN JSDelivr: < script src = "comfy.min.js" > < / script >
ИЛИ
< script src = "https://cdn.jsdelivr.net/npm/comfy.js@latest/dist/comfy.min.js" > < / script >
< html >
< head >
< script src =" https://cdn.jsdelivr.net/npm/comfy.js@latest/dist/comfy.min.js " > </ script >
</ head >
< body >
< script type =" text/javascript " >
ComfyJS . onCommand = ( user , command , message , flags , extra ) => {
if ( flags . broadcaster && command === "test" ) {
console . log ( "!test was typed in chat" ) ;
}
}
ComfyJS . Init ( "MyTwitchChannel" ) ;
</ script >
</ body >
</ html >
В настоящее время в onCommand()
и onChat()
возможны следующие флаги:
В настоящее время extra
параметр onCommand()
содержит следующие поля:
Если сообщение представляет собой команду, extra
параметр будет содержать дополнительное поле:
который содержит информацию о периодах времени в ms
с момента последнего использования какой-либо пользователем или конкретным пользователем одной и той же команды. Это поле может быть удобно использовать для настройки глобального времени восстановления или фильтров спама. См. примеры ниже:
ComfyJS . onChat = ( user , message , flags , self , extra ) => {
if ( flags . broadcaster && command === "test" ) {
if ( extra . sinceLastCommand . any < 100 ) {
console . log (
`The last '!test' command by any user was sent less than 100 ms ago`
) ;
}
if ( extra . sinceLastCommand . user < 100 ) {
console . log (
`The last '!test' command by this specific user (as denoted by the 'user' parameter) was sent less than 100 ms ago`
) ;
}
}
}
Вы можете читать сообщения чата с помощью обработчика onChat()
ComfyJS . onChat = ( user , message , flags , self , extra ) => {
console . log ( user , message ) ;
}
Отправлять сообщения чата можно через ComfyJS.Say( message )
но при подключении к чату требуется пароль OAUTH.
dotenv
npm install dotenv --save
.env
, который выглядит следующим образом: TWITCHUSER = [ YOUR - USERNAME - HERE ]
OAUTH = [ YOUR - OAUTH - PASS HERE ] # e . g . OAUTH = oauth : kjh12bn1hsj78445234
var ComfyJS = require ( "comfy.js" ) ;
ComfyJS . onCommand = ( user , command , message , flags , extra ) => {
if ( command === "test" ) {
ComfyJS . Say ( "replying to !test" ) ;
}
}
ComfyJS . Init ( process . env . TWITCHUSER , process . env . OAUTH ) ;
Вы можете присоединиться к другому каналу или группе каналов, указав в Init()
ComfyJS . Init ( "MyTwitchChannel" , null , "ChannelToJoin" ) ;
ComfyJS . Init ( "MyTwitchChannel" , null , [ "ChannelA" , "ChannelB" , "ChannelC" ] ) ;
Для использования вознаграждений за баллы канала требуются дополнительные разрешения Twitch OAuth (и это должен быть OAuth владельца канала !)
Вы можете использовать этот инструмент: https://twitchapps.com/tokengen/
Области: channel:manage:redemptions channel:read:redemptions user:read:email chat:edit chat:read
ComfyJS . onReward = ( user , reward , cost , message , extra ) => {
console . log ( user + " redeemed " + reward + " for " + cost ) ;
}
Comfy.JS включает функции для управления вознаграждениями за баллы канала. Для этих функций требуется ClientID, используемый при получении пароля Twitch OAuth для канала.
( clientId, manageableOnly = true )
( clientId, rewardInfo )
( clientId, rewardId, rewardInfo )
( clientId, rewardId )
let channelRewards = await ComfyJS . GetChannelRewards ( clientId , true ) ;
let customReward = await ComfyJS . CreateChannelReward ( clientId , {
title : "Test Reward" ,
prompt : "Test Description" ,
cost : 100 ,
is_enabled : true ,
background_color : "#00E5CB" ,
is_user_input_required : false ,
is_max_per_stream_enabled : false ,
max_per_stream : 0 ,
is_max_per_user_per_stream_enabled : false ,
max_per_user_per_stream : 0 ,
is_global_cooldown_enabled : false ,
global_cooldown_seconds : 0 ,
should_redemptions_skip_request_queue : true
} ) ;
let updatedReward = await ComfyJS . UpdateChannelReward ( clientId , customReward . id , {
title : "Test Reward (Updated)" ,
prompt : "Updated Description" ,
cost : 200 ,
is_enabled : true ,
} ) ;
await ComfyJS . DeleteChannelReward ( clientId , customReward . id ) ;
Вы можете отключиться от сервера и всех каналов с помощью Disconnect()
.
ComfyJS . Disconnect ( ) ;
( user, command, message, flags, extra )
( user, message, flags, self, extra )
( user, message, flags, self, extra )
( id, extra )
( user, reward, cost, message, extra )
( user, self, extra )
( user, self, extra )
( user, viewers, autohost, extra )
( bannedUsername, extra )
( timedOutUsername, durationInSeconds, extra )
( user, viewers, extra )
( user, message, bits, flags, extra )
( user, message, subTierInfo, extra )
( user, message, streamMonths, cumulativeMonths, subTierInfo, extra )
( gifterUser, streakMonths, recipientUser, senderCount, subTierInfo, extra )
( gifterUser, numbOfSubs, senderCount, subTierInfo, extra )
( user, sender, extra )
( address, port, isFirstConnect )
( reconnectCount )
( error )
Спасибо всем участникам этого проекта!
Instafluff, Instafriend, Neo_TA, ChatTranslator, fydo, That_MS_Gamer, MrRayKoma, Amarogine, HunWalk, simrose4u, sparky_pugwash, soggycoffee, blackdawn1980, BooobieTrap, lizardqueen, TastyGamers101, MalForTheWin, SourBeers, Stay_Hydrated_Bot, codeaurora, DutchGamer46, TheHungerService, BungalowGlow, koralina_211, TominationTime, itsDeke, fd_god92, SushiDay, FlyToto_, Docpinecone, katori15, ScrtSolstice, QeraiX, superravemonster, Jwh1o1, Deitypotato, Stobie, Chlapicek99, tehWokes, SuperChihuahua, FranC312, FuriousFur, Moopaloo, CreativeBuilds, donaldwm, Zorchenhimer, Grognardian, ravavyr, Chibigirl24, DR4G0N_S4MUR41, PokemoHero, rekaj3773, cunavrito, TheGeekGeneration, DevMerlin, julieee22, неисправность, blazeninja3, pookiepew, xxMiabellexx, Rlchibi
Спасибо всем, кто помог превратить Comfy.JS в модуль браузера!
Instafluff, Instafriend, ChatTranslator, Gilokk0, qbotv3, That_MS_Gamer, KitAnnLIVE, simrose4u, MacabreMan2, LuRiMer313, sparky_pugwash, AbbyFabby, sethorizer, julieee22, Numb3rY, Jwh1o1, Baileydale, Kevkab, Stay_Hydrated_Bot, DrJavaSaurus, стресстест, BungalowGlow, Dr_Zero, NiteCrawla, fd_god92, DrEriksen, codeheir, Talk2meGooseman, sneelps, Cottonsmiles, DutchGamer46, LilyHazel, Kyoslilmonster, guthron, DragosNox, Sciondragons, HonestDanGames, Xynal, MerlinLeWizard, FablesGames, BrainoidGames, donaldwm, Gharrotey, RIKACHET, HeyOhKei, DevMerlin, CrimsonKnightZero, ellie_pop, ItsNaomiArt, SomaPills, TheSabbyLife, bktdakid31, IsaisChannel, thegooseofwild, hisDeke, bubblesandunicorns, jellydance, MalForTheWin, Chibigirl24, Pearcington, RikuRinku, rockysenpai24, DEAD_P1XL, codeaurora, Endless Moonfall, fromtheannex, Optik_Nerve, qerwtr546, REAZNxxx, GoonPontoon, Джесси Скиннер, roberttables, pookiepew, Lannonbr, SoG_Cuicui, Deitypotato, shalomhanukkahbneishimon, UpmostKek, xeiu, Skatesubzero, Kingswerv, K1ng440, kaisuke, kinbiko, Malfunct, BooobieTrap, Kara_Kim
Спасибо всем, кто присоединился к добавлению поддержки Twitch PubSub для использования вознаграждений за баллы канала в Comfy.JS!
Instafluff, Instafriend, infothemusic, aRandomTim, Shadesofpixie, That_MS_Gamer, ToeNeeHee, httpJunkie, ryanchetty_1, Calguru, chrislocality, Atanerah, rekaj3773, moshiko777, фижес, AnnaCodes, Smokestormx, TheGeekGeneration, SavenaV, KotaKlan, Rosebutterfly24, Simpathey, Spationaute, DjDesidera, JupiterZky, judybelle1, Shaezonai, Shineslove, airsickmammal, walaber, jellydance, LilyHazel, PainArtist, Nickloop_TTV, VerbatimStudios, silversurfer1989, BellaTriXrbsa, Holloway87, Asherroth86, Tiwesday, not_your_point, JenDevelops, tenaciousw, Cuicui_off, stevis5, aranhawaii, DevMerlin, wabes1, jeckle, opti_21, sparky_pugwash, tomunist_64, DutchGamer46, DoctorArgus, simrose4u, DreamGardenPanda, onelineofme, stuyksoft, Simployed, JustinZedly, Rhedone, DrMikachu, Gurkenkater, MrDemonWolf, saltiprezelz, MerlinLeWizard, Kurokirisu, Juscekame, FuriousFur, andresurrego, MissNightcrawler, karatewump, DrillsKibo, florinpop17, Axell99Design, Ahmed_Riad_1, Keegan_GDiegen, PortaalGaming, mjewl, cheppy4444dude, Soccerdude4444, klforthwind, penguinian, 10TenArt, Atndesign, DNIStream, LoveSudoNimh, prosto_artem27, lucasnramos, A_Ninja_For_Jesus_Bruh, RedChrisMS, Lineyatronic, Totte292, A_Gold_Fish, ShiDotMoe, tbdgamer, MatthewDGroves, dota2attitude, Mristeryntax, SekaCakes, llamakid29, CryptoCoyote, MurdocTurner, JeanValjean80, Walpolea, Jessi8712, Butschibuuuu, Cmiley6, TheFlamingWings, hehe24h, криоген_sw, DrJavaSaurus, rota22_, julieee22, bronic16, ScrtSolstice, Ghostlupo86, Wake_the_beast, WilliamCameron2, GizmoPugLife, OG24com