我们在 Twitch 上为 Coding Cafe 构建了这个舒适的 Twitch 聊天模块!
特别感谢: Comfy.JS 的实现得益于 @AlcaDesign 维护的 tmi.js
Comfy.JS让您只需几行代码即可超级轻松地与 Twitch 频道的 Twitch 聊天集成。这是一个 3 分钟的快速视频,介绍如何使用它:(点击图片打开视频)
喜欢这些项目吗?支持我的开源项目的最佳方式是成为 GitHub 上的舒适赞助商!
https://github.com/sponsors/instafluff
快来和我们一起在 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" ) ;
dist
文件夹下载并添加comfy.js
或从 JSDelivr CDN 包含: < 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()
中可能的标志有:
目前, onCommand()
的extra
参数包含以下字段:
如果消息是命令, 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 包含管理通道点奖励的功能。这些函数需要用于获取频道的 Twitch OAuth 密码的 ClientID。
( 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、malfunct、blazeninja3、pookiepew、 xxMiabellexx,Rlcubi
感谢所有帮助将 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、itsDeke、bubblesandunicorns、jellydance、MalForTheWin、Chibigirl24、Pearcington、RikuRinku、 rockysenpai24、DEAD_P1XL、codeaurora、EndlessMoonfall、fromtheannex、Optik_Nerve、qerwtr546、REAZNxxx、GoonPontoon、JesseSkinner、roberttables、pookiepew、Lannonbr、SoG_Cuicui、Deitypotato、shalomhanukkahbneishimon、UpmostKek、xeiu、skatesubzero、 kingswerv、K1ng440、kaisuke、kinbiko、malfunct、BooobieTrap、Kara_Kim
感谢所有参与将 Twitch PubSub 对频道点奖励兑换支持添加到 Comfy.JS 的人!
Instafluff、Instafriend、informathemusic、aRandomTim、shadesofpixie、That_MS_Gamer、ToeNeeHee、httpJunkie、ryanchetty_1、calguru、chrislocality、Atanerah、rekaj3773、moshiko777、fizhes、AnnaCodes、Smokestormx、TheGeekGeneration、SavenaV、KotaKlan、 Rosebutterfly24、Simpathey、Spationaute、DjDesidera、JupiterZky、judybelle1、Shaezonai、shineslove、airsickmammal、walaber、jellydance、LilyHazel、PainArtist、Nickloop_TTV、VerbatimStudios、silversurfer1989、BellaTriXrbsa、holloway87、Asheroth86、Tiwesday、 not_your_point、JenDevelops、tenaciousw、Cuicui_off、stevis5、aranhawaii、DevMerlin、wabes1、jeckle、opti_21、sparky_pugwash、tommunist_64、DutchGamer46、DoctorArgus、simrose4u、DreamGardenPanda、onelineofme、stuyksoft、Simployed、JustinZedly、Rhedon、 DrMikachu、Gurkenkater、MrDemonWolf、saltipretzelz、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、mistersyntax、SekaCakes、llamakid29、CryptoCoyote、MurdocTurner、JeanValjean80、walpolea、Jessi8712、butschibuuuu、Cmiley6、TheFlamingWings、hehe24h、cryogen_sw、DrJavaSaurus、rota22_、 julieee22、bronick16、ScrtSolstice、ghostlupo86、wake_the_beast、williamcameron2、GizmoPugLife、OG24com