Issues for large (many channels) bots

We started discussing the effects of rate-limiting in another thread, and I thought I’d create a focused thread to let the devs of large (many channel) bots highlight all the annoyances they have maintaining their software with the current chat system.

I assume that rate-limiting will be a common issue here, but there are probably other issues too which are unique given the scale required for these large bots.

Periodically, I will try to summarize the issues with posts which list all the annoyances so that the state of the list isn’t too difficult to find.

So, large bot devs: whats bothering you?


In addition to all of the rate-limiting discussion from my first post, here’s some other areas chat needs work:

  1. Lack of transparency with updates, and nobody to debug problems with

    What does this mean? Essentially what I keep seeing all the time is chat updates get pushed which break things, and then I have to go searching for answers. A heads up would be thoroughly appreciated.

    In addition, there’s also been random complications when running bots large scale, more recently (as stated in my other post) is the server-side 20 messages queue. It’s extremely easy to fill these 20 messages, and the slightest lag spikes (like a networking dropout) cause a massive disconnection issue (and with the number of connections bots have, reconnecting to hundreds of connections that just disconnected is like booting up a bot on cold start – it takes forever due to rate limits). If you’d like to see how buggy that queue is, try joining the top 20 channels on Twitch with an IRC client without TWITCHCLIENT 2+ passed and you’ll get insta-disconnected (here’s an example of what you can paste into a telnet window to test with as of 11:45AM EST: Getting people who could invest time to help debug these issues would be extremely helpful.

  2. Lack of API endpoints to make up for missing chat functionality

    1. Moderator actions are not logged at all, nor does chat say which moderator performs any action. This leads to rogue mods and needs to be fixed.
    2. There’s no way to get a list of moderators outside of typing /mods, and the mods command breaks IRC RFC for some channels.
    3. The only way to get a list of subscribers actually in the channel is to “listen” for them. Why aren’t they shown in the TMI userlist?
    4. There’s no way to get a list of timeouts nor bans for a channel (also would be nice to see #1 including in lists).
    5. Functionality like hosting channels is chat only, and should really have an API endpoint (there’s a “editor” API permission that I use to update channel status and title, why are features being made that only have in-chat commands? It’s incredibly difficult to have to ask users to add a bot as an editor to a channel to build extra functionality for channel hosting).
  3. Improve existing functionality

    1. Only 1 user can be unbanned at a time. It’s annoying to unban a list of people when we’re rate limited.
    2. Timeouts are “overwritten” - Someone is timed out for 86400 seconds then timed out for 5 seconds, and 5 seconds sticks instead.
    3. Distinguish a ban versus a timeout in chat. All we see is “CLEARCHAT user,” but why not give a time, and the user who did it as well?
    4. Chat stability - Joking, you guys have actually fixed this for the most part (I think that the only issue left is moderator-tracking stability, where we see mass -o, followed by mass +o in chat)
    5. I’m sure there’s more… We made a Google Doc with mpoon on the #twitch-api Freenode channel, not sure where that was ever placed.
1 Like

Google Doc Night referenced:

The only thing that concerns me at the moment are the rate limits and how they affect growth. My bot, Moobot, has grown over 1000% in the last year alone (this is its sixth year), and with these restrictions it gets increasingly difficult to join more channels (Keep in mind I’m already very strict in removing inactive channels) Now this like anything else I can work around, in this case by throwing money at proxies, but there’s an issue with how much time should be wasted on avoiding restrictions instead of adding something of value to my users.

In the past I’ve experienced an extreme lack of insight into the community from Twitch decision-makers, and it wouldn’t surprise me at this point that Twitch wouldn’t care about third party chat tools, and for some reason try to create their own alternative. They already tried to create their own alternative tools in the past and it was a total failure. Now with these proposed restrictions it has the potential to kill off all the third parties, and then there will only be the default tools that Twitch would make (tools that would have no restrictions of course), leaving Twitch users no choice in what to use.

I’ve never liked the whitelist idea since it created monopolies on JTV, but it really seems to be the only option. Either that or remove the restrictions entirely.
It would have to be moderated personally though, much like the Riot API, where someone from Twitch goes in and tests the various applications and accepts/denies them based on that. And once you’re on the whitelist you’d either have no restrictions, or it would be tiered where you’d apply for higher rate-limits based on your userbase. (Like the current rate-limits may be good for 99% of IRC users, but they’re far from good for bots)
Sending something when you connect, like the Twitch API has a client_id, would be ideal. That way you could operate under several names and on several servers/IPs for the same application.

1 Like

Hopefully we’ll be able to resolve this by being more active on these forums. I’m very happy to see that this community is fairly active.

I wouldn’t cross this off yet, there is still a good deal of improvements to be made here. It is simply better than before, but not as good as it should be.

This definitely needs to happen.

There is the case where someone accidentally times out someone for 600s instead of 60s and would like to fix their typo, so I’m not sure this is straightforward.

What is the use case for this? It may be better to just expose via API a log of mod actions for a channel?

Determining if a user is a subscriber is actually a fairly expensive lookup currently, so we try to avoid making that query unnecessarily. There is currently a large project internally at Twitch to make distributing state changes between services (payments → chat, users → chat as an example) more efficient, but for now in an effort to scale we try to avoid looking up a user’s subscriber state unless they actually send a message.

Message length too large? Or some other protocol issue?


1 Like

Chat doesn’t say how long someone was timed out for. When you have multiple mods in chat, more than one can timeout the same person. While there’s your singular use case where someone might make a mistake, that someone can always /unban and re-timeout the affected user. When mods are trying to timeout someone, it should just take the longest time possible. Emitting that time to chat, as well as the user who performed the command, would allow other mods to make decisions in real-time based on timeouts and prevent mod abuse.

The former is precisely the reason. I think I’ve also heard someone complain it can crash mirc.

It was actually part of JTVIRC ( and having audits was great! ). The web functionality remained for months on end after TMI was rolled out, even though the data it pulled from wasn’t updated anymore. Users complained it was “broken” non-stop, but “it’s not broken, it’s just not implemented” was the response that kept being given… so the web functionality was removed entirely ( This is why the “Activity” tab of the dashboard actually had a sub-tab for a while, there were supposed to be two, editor actions and mod actions )

If a feature exists, and then suddenly stops working ( correctly or at all ), then it’s broken to the user, regardless of the reasons why on the backend.

More specifically is that anyone can override anyone else’s timeout lengths. Allowing a user to override their own timeout length on a whim like that is fine, but for anyone else to set it to a lower time should require something else ( an actual /unban, perhaps? ) if a user is nuked for 10 seconds, then 30, then 60, it’s fine. The large issue comes into play when you give someone a 10 minute timeout and someone else purges the user ( 1 second timeout ), immediately allowing them to talk again.

Adding an API to kraken is likely the better option since you don’t want the entire world to know X user banned Y user, that’s something only authorized individuals need access to ( and connects directly to the mod audit issue )[quote=“brildum, post:5, topic:1111”]
Message length too large? Or some other protocol issue?

Yeah… look at what happens when you get the mods list from /zoiatv,

The moderators of this room are: 00owl, 18visions_pyf, 4not, 6hartja, acchernar, adarc_, adikar, aflackduck77, aksenn, aldarin, anele, angeldaemen021, aquabeef, askjoshy, astroorion, austinthegamer, axeltoss, axeriot, bebas1337, betowulf, bigj_, bkxassassin201, blackthumbs, blitzkriegqt, bonkarooni, boomysc2, boyostarcraft, breenk, brovolone, bullmamma, bwiggly, byrnzie, cal_619, caliber, caranor, catsams11, cecil900, cedstick, chasian, chosensc2, chronos1990, chulozn, citron15, cjzrocks, claritypromise, clinto1, cm_trikslyr, colkoma, colsasquatch, comrade234, constablemittens, copywrong, cornelbr, crenverdis, crumbgg, csn_zacharu, cyasteve, cybersportsnetwork, daftnub, daigok, danjinwonkim, darkblaze45, darkstrider35, dawsonwalters, deathangel111, deathofmarat, desor_, dignitasbischu, dignitasmeph, dignitasodee, djhuoshen, doodiusmaximus, dorotheus, dpad, drfrow, droneitup, dubsteqqt, dunktrain, dunny087, duvajga, egazael, eifersuchtig, emma_stone, ericles1557, est_man, evoti, exo, fanifia, fapington, faust100, fearlessalyssa, fever4flava, fitzyhere, floxing, frodan, frompleglory, fryedman, fxokarmyinactive, g3ngraphics, g3t_sup3rtr0ll3d_alldae, g3t_sup3rtr0ll3d_alldey, gamergist, gaulzi, gekopoiss, georgehasskillz, glgghf, globexcorp, glorfindorf, godulous, goldenboyftw, greco765, grimmyman, grocerybaggins, groximus, grrin, gwincraft, h0pesfall, hail_eris_bot, hallonikanada, halodude2, happyrage, harmlessplays, hendralisk_, huncoupdegrace, hustlr23, iamurbanlegend, icy100, idiotank, idrajit, idunnyx, ieddii, ihertz, importscorner, imvirus, inf1n1teabyss, infydk, ipash3n, irishstud14, ironlung12, irwintheboognish, isunmonkey, jaakea, jabberwack, jacobfan12, jaddeal, jamesthefishy, jastyle, jc5999, jewbaccafication, jimmy90, jinks_, jman395, joarthus, jointkicker, jonrobtom, joofro92, jorosar, joshie3, jrock90, jtredneck, junkxxxl, kahunapirate, kaltyir, katealyst, katustarcraft, keld0rn, khazei, kingsean222, kinsky1, klzslaver, koreign, krucialist, krystiang1, ktsalz, kuchcio, kumiholight, kunthammer, kyanic, lacedarius, lefluffed, legendinthehouse, legit_midget, linaver, liquidsheth, livinpink, lol_king, lol_king_123, lorsungcu, lowershafthair, lulz2578, lwrshafthair, magesael, mangofries, massansc, mastamp3, masterdalktv, mataxp, maxamix, mbgny, medic04, megamenx, mellows7, michael1848, midnight4u, mithrandir22, mjkelly93, moosegills, morgan8888, multichill, nathanias, naxt890, nazrath, next_futuresc, nickcarefoot, nickelas, niftyzach_1, nittybeat, nmxteam, noctyrnal, nomad_gsf, nostalgiatalex, notchd, nubaeus, oenigmaa, omegablackmage, onemazz, ostium, ovdose, p3dr0b3ar, paper_iz_thin, papers7, pastoortjeh, phaily, pknight123, planimal, playerboy345, pokemmo, pokemmorpg, pokeuser7878, pragmaonce1, prototypejashin, proveninnocent, puckk, pughydude, purai, qlimax1989, quukadiili, r3be1x, ragnorokg, ramennoodlesoup, rectalzerg, reqrocker, revsynth, revsynthetiq, rifteyx, rigabert13, riseramast, robin_wonders, rochaid, rockahype, roguemanor, rozzy18, rsteffy, rtwice, ryang4033, samheiser, samsc2, sauvajohn, sc2bright, sc2vagenda, sc2whimpen, scalymf, scarlettm, schamtoo, screamoluvr, sgl2386, shask87, shinybast, sir_slime, sixpoolgaming, skrymir2k, slidetalentz, small, smurf193, snibbled, solidjakegg, someants, spacemayu, spacewhales, spaction, spaghettijustice, spyrianblizz, squad0321, squall409, squishei, sssystem, streamvsniper, sunnysc, supadonut, svtoorn, syntropic, tamzim, tazzreno, tcfbank, teabag187, tehzergnub, tekeino, terranuker, terrorroyal, teuttli, th3creature, the_ursadon, theawesometyranitar, thekenu, thekuhn, thepsylence, therealnanman, therickyb, thesmallbouse, theyoungonessc2, thirdegree, thundertoss, tinzu, tjartizard, tlghostclaw, tminus2011, toddgack, todsc, tome116, tompa899, toon2k, totaly_savage, touchmyfish, trismgg, tubbythefat, turtlenuggets, ucsdvislab, ugonitenite, unctioussc, underhate, v3rnacular, valiants_sakura, vanishtrilogy, vlad_the_implyer, wankingwes, warpwny, whatthegank, whirlingswirl, wiseman2024, wivren, wuler, xerislight, xexzy, xprisky, xwammbo, xxlouiethirteenxx, xyanic, youngbae, yuan2iu, zakiller07, zephyros17, zerg_rush, zerg_sofcking_imba, zither1, zkaguro, zombiegrub, ztgme, zyrannaroghtyr

or worse still, /lethalfrag…

The moderators of this room are: 2plus2ispotato, 2siktv, 3nf0rcer, 81mrx, 8bitdensi, a16bitmetroid, a_horny_cyclist, a_psychic_rat, abermuffin, acardinal86, acegoeslive, acejohnson81, acidicsnail, adam_blazar, adamezie, aderda, adultswimgames, aekornmyr, aerogia, aethos19d, ahalfflayedpony, akuradavis, al_griffiths13, algolgaming, alicebliddell, aliod, allorynwow, amphidsf, amypandabear, ancientguruhamm, andresio123, andrewmorrish, angelofthenight091, angelzero282, antisolarflare, aok79, arabador, aragorn124356, archangelxiii, armaghost, arrteasea, arsanthania, attckcat, austin0315, autern, azndrag0n, badump2007, baef, bakednotfryed, bananacognac00, banananation, baum98, bazzel742541, bbh_ares, bbh_vostik, bearsbewild, bearsmash16, beben, bedardo, beef_, beekeepers, ben_benjamin, benprunty, bentacore, bobdanoob, bobzuncle, bodman6, boshytime, boxoftea, br1zzo, brainvvashed, breadbomb92, breee_xox, brotatoe, brownburr, bryntor, bryonato, bubellche, bulletx, bunnymountain, burkeyburke, buscemi2133, captaindoctor, carterthewc9, caslol, catharsis33, ccrayola, ceciliaofsweden, cenodoxuss, cfi_dontstabyou, chaide, char71, chatez, cherrytonic, chessnetwork, chibard, chibitamashi, chicken, chillurnips, chorf, chris92, chris_sawatzky, chrissylynch11, chromega, cilantrogamer, citlee, cityfires, clanep, cletusc, clostridius, clydesdalle, cobaltstreak, combat0, combatdildo, comradeslavo, cosbypuddinpop, cougarhart, cptsillyfrog, crabberry, crazyday2606, cricketoffrogdice, cruick32, crumps2, cryaotic, cubby411, cuddlyscorpion, cujo_89, curlyhairedzombie, curtis_e_flush, cyanideepic, cynicalbreeze, da_chicken, dace617, dalaena, damdk, daolonwong, dapperthedinosaur, dapyman, darc3y, darksaiyan, darktwinge, darlingmelanie, darnococsalev, darrenpr, dartaris, dasnoob, davidvin2387, day9tv, deadly_starr, deathbyace, deathlyiam, deathyoshi, dee_strongfist, deeshedevil, denferok, derganove, deriol, derpiiie, destruire, disgrim, djflashpoint, djlink_, djrsc2, doddie321789, dogrunes, donorak, dorkygirlplays, dr_badonkadonk, dr_danish, draco21045, drakkasaur, drbiglove, drbutttouch, dream_inc, drhonker, drmaple, drparabola, dudejr, dustmouret, dutchydc, eandacrew, eatitup86, eddieruckus, edmundm, eenis_pnvy, eijilove, eldest2025, elementology21, elitegoomba, elyctrik, em_uhh, emarean, emptyapartmentgaming, encryptio, entro, epdiablo, escargo77, eugenides4, evalet, evilseph, extract, fabulous_doctor, falloftheliving, ferretbomb, fetuzstew, flamintoadstool, flanlord, flo_progressive, flodie3000, floppehfish, foolishboat, forlornlemon, foxy_grandpa_, foxy_shazam, fpssteam, franksayrelaxx, frankysayrelaxx, fredaxeljohn, friend101, frogdice, fuguestate, fullmetal779, fullxander, g4bliss, g_e_a_r, gaynine, gengar, gentlem3n, genuinealucard, geoffblair, gerobishi, ghaele, gingerjonny, gingerjonny477, ginoginnetty, gisp, gororules, gothiclolita, gotothebedroom, greateagle5, grettythegecko, greytape_1221, gruberbot, grubermeister_, guerilla_gun, gxxr07, haelstorm, halenio129, halluxrex, hamsterbeam, hanakitten, havokk5124, hazel1558, hdreviews, heeleos, henley, herpa_derpasaur, heyparalyzer, highlnder777, hikano, hiluxhd, honeynuts, houstongirlgotu, howdyma, hsg3, hskguardian, huhbum, huxlie123, hyperkind, ibeluckyyy, icedinsanity, ichrius, icupquake, iipstick, imcali, imfinallyawoman, imjocavs, imtoe, in5150wetrust, ingideon, innominatus, insanejudd, internetslive, intopuddles, inupo, irlubo, ishizz, itmejp, itsdillo, ivyiss, jaarl, jager, jairee, jakosin, jarmustard, jasmineca, javasouth, jcam2920, jerbear666, jeremiah93john, jesuscripe, jesussqeezy, jesymynce, jinandtonton, jinzonam1, jjag72, joemutant, john_stoic, jools64, joshes19, juicybox1, juicytarball, juipie, julia_cs, julinde, jumpyluff, justicefries, jyrii, kallopskenneth, kappordm, karabear22, karlstanne, karoleigh, kathairein, kazanmor, kereska, kevin_from_klei, khaninsanity, khuur, killexthefox, kimack, king_foom, kirjain, kirkalirk, kitsukage, kitsunekyon, knightmaretv, krazedirish, krazykurtis, krittycat, kudunk, kunzite_, kuratchi, la_licorne, laboratorycoat, ladelfrog, ladyaijou, lancereiger, landonpodbielski, lanmore, last_big_boss, lezerald, libbyseay, lich120, liliaku, livestereo, lknives, lkugeth, loddhal, loft, logobolas, lokixriddle, lokoforloki, lookatmygaming, loon4tics, lordvashi, lpamdee, lpd9_2, lt_spitfire, ltnsarge, lukinator89, lunaticfanatichd, luveluen, lysanderxonora, m_page, madmax1259, magicaltimebean, majeye, makhekles, maltionthefurry, mandir75, mapcount, marcuso761, maria_pounce, marjak, marrow187, maruplays, masarave, mason220, mathanw, mawnsturr, meat_jesus, medlow, melodiousdissonance, mental_jim, mentalbill, mentarob, merex760, merpinn, metalman27, mholmes27, miacupcake, michaelhoncho, michaeltoddgames, mickol32379, minoko_, mmojuggalo, modxk, mogmind, moobot, mooboy2000, mooshman, mortis91, mr_malum, mrcrowleyy999, mrdavedotcom, mrdna32, mrmanno1, mrpistachionut, msjezebel, msmel, muffiinn, muncheezlol, mushimoo21, musikluvah, myll_erik, mynewpeppep, mysterymachinesa, n0cturnalist, narwhalbuffalo, naturalprogress, netarchy, nickabc423, niklor1, njurdi, nohanna, nonforma, nonneh, noshpan, novameltdown, nytelyteable, oatgerm, octozor, ohfaceme, oilyraincloud, oldnord, oldwisepaly, ollee64, omnomnomnius, one__heart, onlinejaguar, oppositewerewolf, orcohan, outpostantara9, paddiebear, paddleballs, paigees, paladinlord10, panic_ave, paulscelus, paulygon104, pbnjams, peneiopie, penneypad23, ph4ser, phalinx666, phenomq, pilaf, pinballwiz45b, pinkbeauty357, plompkin, ploof, pometi, priest333, princessluna85, princessofthenile, princezzxdiana, professorwaffles, protipz, psychal, psychicassault, psychoholicx123, psychoticharmony, punk18201, purewolfgang, putrisydewill, pwnsnakedd, pwnswoggle, quadzilla74, quasid, qwertvert, rabid_gnome, ram8704, randolph82984, rarthh, rdiablo, reddeadfamas, regretful, reidlostoof, renacide, renbourne, rentalcorpse, revomarine, rhaviolio, richtaur, rickythemaniac, ridrix, rif_king, riptidepow, riskofrain, robx4, rocket_horse, russ_money, ryjeon, ryuusei, sa_daani, saangreal, sacriel, saltycookies, saltymike, saltyreaper, sapphiire, sapphire, saron_gas, sc4rcat, schnee_wittchen, schnockered, scichronic, scoobyfred27, scottish89, scrilla211, sdzero, sebzlol, serotriptomine, setdmais, sgtcortez8693, shaawing76, shade703, shadogazer, shannonzkiller, shdwbxn, shea_wolfe, shelby_dovah, shinobionic, shiroku69, shvndrgn, sickskillz99, siglemic, silver_streams, silvermoondrood, sirzie, sk33tlejuice, skism359, slacimehc, slackaholicus, sladeakakevin, slashdotism, smellmybert, smurfizzle, snapshotdod, sneakyazshiite, sneakymodetv, socaldesigner, sodaaddict, soddingenigma, sog_ares, solgryn, solixtanaka, sophora, spamfish, springfart, spudmaster, sqeeto, squiddytron, st4tus, stalkerkoffie, steam313, strifei, styxx, sub7even2011, subjuro, sudorus, sugar_jay, sunforest, surf573, surtainx, susiex09, swagger2204, syzenna, szadeak, taiko88, takkurei, takujiz, talmera, talutha, tavion, teaguemckinney, tealybear, technomagi, tecnophi, tehbanana, tehdewm, tehmorag, tekeino, telrinx, tempforge, ten_or_10, teremus6, the_13th, the_chopsticks, the_dapper_meter, the_lonelysheep, the_phant, the_weekend_gamer, thedaringpastry, thedesertonfire, thedisabledsquirrei, thedisabledsquirrel, thefuzzytoaster, thementallizard, thepolaroid, theprixie, thercro, theredknightofcleveland, thethizz, thetigersofhull, thevikingbeard, thezoningbro, thing1thatiam, thmoto1989, thorgi, thrull, thundros, tigrelilee, timdottv, time_warden, tinaskunk, tinch088, tinytheboss, tknebel, tnbhelo, toaster579, toonfish95, toons11, tornis, tortio586, totally_cereal, tr1ckpoker, trancef0rm, traylini, trissylion, trogdom, trollbomb, trvsblackwell, tsurayu, tubecat, tuesderp, twincannon, twitchnotify, twittwit_, tyroche, uedarkfry, uesugi_tadao, ugcgaming, ullr_son_of_sif, uncivilized_shoon, unicornmoo, unlogik, upaboveit, uplift_tv, urbanchessguru, valkyrov, valsen, vbnight, vegasjamie, veloel, ven0mkisser, venomosity, viridis_telum, vrimsten, vykeria, wafflebott, wearedetroit, wearetheromantics, weirdkirby, whiteinverno, whoisbma, whynotoatmeal, windfox470, wmcrucial, wolv21, workwagon, worlsgonebyebye, wsacrules, x_haku_x, xallisonpaigex, xanderag, xaxius_colnier, xbobthebulider, xeniongaming, xenowad_90, xenry, xenviousx, xerofour, xroboticzombine, xtinker, xxchaoxx, xxplosions, yeousch_live, yoinkerman, yooncakes, youspoonybard1, zaadis, zach4200, zackparrish, zasdarq, zblurryz, zehkal, zekklp, zephyrik, zero_awakening, zetaspartan21, zhadgon, zintaris, zippok, zolzan, zombiejill, zomgitskenny, zomzomzom, zoob528, zuie700

Way, way past the message length limit, and actually kills bouncers like ZNC on message reception. I’m not sure how less stable clients like MIRC would handle it.
This is made amusing by the fact that the maximum char length a client can actually send is 1000

1 Like

For some context, there has not been a person or team dedicated to the chat system until the start of this year. When we started working on TMI, our first priority was simply focusing on chat stability. You are all more knowledgeable on the quirks and issues of the chat system, so we’re hoping to lean on your knowledge as we now focus less on stability and more on making sure that the chat system provides the functionality to power the features that users want. Many of these features are provided by bot devs, so its definitely a priority to make sure we’re providing the infrastructure for you guys to build those features easily.


It is great to hear there’s finally a team for the chat, and a seemingly passionate one even!
Though for me all the nice-to-haves mentioned in this thread are secondary, where as the primary thing of all is keeping Twitch chat as it has always been, and not making sacrifices to functionality. Only once that can be done, where limitations aren’t put on what we’ve already had, will the secondary nice-to-haves have any significance to me at least.


In my honest opinion, priority should be (and already is) chat stability, so I second moocat’s notion. It’s been incredibly nice seeing green all over on lately, and while there might be more stuff needing stabilization the work already completed has had a lasting effect on overall stability.

I’m also glad to see someone from Twitch actually being more open about chat and wanting our feedback on chat changes. It was pretty clear to most of us for the longest time that chat was being completely ignored. The only time Twitch seemed to have touched chat was when it was down constantly due to Twitch Plays Pokemon. Whether or not anything was going on behind the scenes went unnoticed by the community during that time.

It would be nice to see, as stated in my earlier post, more transparency. Maybe keep a list of what’s being worked on and where you’re headed (excluding deadlines, for obvious reasons), and publish more frequent updates to the Twitch blog. Not to be rude, but the Twitch community (or at least communities I frequent on Twitch) has had a pretty negative view towards Twitch’s developers for neglecting chat. I feel that if you can show improvements are being made, you may be able to also start increasing the morale towards the development aspect of Twitch. The chat problem at Twitch extends to before Twitch’s existence, and it may take some time to fix that negative view.

I’m definitely happier with how developer relations have been recently. Fugiman has been invaluable as he definitely goes above and beyond what his job probably entails him to do (he’s even in the Freenode irc after hours, which is extremely valuable). I’m hoping to see that type of relationship build with the chat team at Twitch, so perhaps all these recurring chat issues that have been happening since Twitch began can finally be laid to rest.

1 Like

I was thinking this exactly. A lot of times our plans change, due to firefighting when things start breaking and identifying some new bottleneck or issue, so only general roadmaps with a ETAs of soon™.

1 Like

All that has been said here is also valid for smaller scaled bots like I have for some friends’ chats.

[quote=“night, post:2, topic:1111”]
Improve existing functionality

  1. Only 1 user can be unbanned at a time. It’s annoying to unban a list of people when we’re rate limited.
  2. Timeouts are “overwritten” - Someone is timed out for 86400 seconds then timed out for 5 seconds, and 5 seconds sticks instead.
  3. Distinguish a ban versus a timeout in chat. All we see is “CLEARCHAT user,” but why not give a time, and the user who did it as well?[/quote]

I would really love to see these changes. Especially the second point because you can even override a permanent ban with an 1 second timeout. The longest timeout should be picked here.

Just as a note, this should really not be publicly logged, any disputes should be resolved among the mods and/or the broadcaster, making this public may cause lots of unnecessary drama.

An OAuth token for a user authenticated to your app could maybe be used for increased authentication. Then if the app is whitelisted or has heightened privileges, the system can somehow take into account that a specific channel’s user allows the app through authentication.

A possible flow would be if a connected bot joins a new channel, using the oauth token generated when the broadcaster connected his account with the bot’s app.
It’s a nice way to say “Hey, I’ve got this channel’s explicit permission to be here”, it would be very hard for a malicious bot to do this. And access can be revoked by disconnecting the app.

EDIT: Or even a global command that identifies the bot as a bot, and only lets it speak in channels where it has mod permissions, but greatly increases/removes limits.


That’s an extremely good idea. That means the bot is whitelisted on a channel basis, and there would be no need for Twitch to manage a list themselves. If this permission granted no restrictions on all channels it is specifically permitted in it would solve all and any future problems.

1 Like

There’s going to be drama no matter what happens when people abuse moderator powers. Stating that showing it in public causes drama is a pointless argument, as a mod abusing power would be scolded publicly by the streamer and/or timed-out/de-modded in chat. In other words, a public message may further deter mods to abuse power, as everyone would know in real-time it was them.

I agree with @night. But also because you could use this data to make something that learns from what is being timed out.

This is interesting. If bots have moderator privileges, that tells us there is permission as well, yes? It requires less management for bot developers and broadcasters since moderators are already a managed list.

Having bots register an oauth token with permissions on a channel is slightly better from a security perspective, since 2 oauth tokens need to be stolen to act maliciously rather than just 1 (if moderator status is all thats used).

This was the original suggestion to mpoon (see the google doc linked earlier in one of these threads), but it seems that moderator privileges was not enough to grant no restrictions? (it should, in my opinion)

EDIT: We’ve also talked earlier that when you do get restricted, chat should just reject the action and give an error message, not close down the whole connection with zero reason given as to why. (This would be a prerequisite for something that can be added and removed as easily as moderator privileges)

I don’t think we’ll ever remove restrictions entirely, because sometimes even non-malicious bots spam us at rates that can’t be considered normal usage. We’ll need to have some rate-limits to protect against these cases so a bug in a bot doesn’t cause chat to die for everyone.

However, there are questions for how these rate-limits are defined which allow for bots to grow, new features with different usage patterns to be possible, etc…

This leads to another issue we have with the chat protocol. We have debated whether using HTTP is preferred API for commands/messages. HTTP is supported by every language and the request/response is built-in (versus having an asynchronous request/response via sockets, where causality must be inferred [is this response for msg A or msg B?]). We definitely want our own clients to receive responses for actions (sending messages, commands, joining, etc) that have more information for a better UX, but have debated whether its best to implement it via IRC, HTTP or both.