I just wasted two month time of development regarding my loyalty bot, for real?

hey guys,

after i finished mostly all work on my bot, that include already a lot of annoying checks and workarounds to get it running as of the rate limites, unstable tmi and api servers and a lot of other stuff that make it hard to get things perfectly running…

… i made benchmarks as letting the bot run in like 100 channels for many days and logged all information for later inspection.

now, i figured out that to get an accurate and actual list of active chatters per channel seems impossible.

as i made a reward bot now i cannot guarantee that people that are not anymore in the channel (for a long time) dont get points anymore. and this is not the worst.

it takes like forever or will never happen that i get a list of actual active chatters, especially new joines to make them rewarding my points.

/join and /part events seems not fire as they should, /names is completely broken/unstable.

i just let my bot run for like some more hours now and checked the viewer count my bot knows about and compared it will the real viewer count in the chats over API and manually inside the channels.

the data was so far away from being accurate that i want to cry!

so i hope somebody here can just tell me that this is an issue by my library that is use (tmi.js) or of other people having the same issues, because if, than i have no idea how anybody on twitch can get a working loyalty bot running.



JOIN/PART messages stop being sent for normal users after there’s more than a thousand people in the chat.

People in chat also differs from the people watching the stream. Often, there is a lot of overlap, but there’s almost always people in chat who aren’t watching the stream (or even have it playing), all bots for example, and there’s almost always people watching who aren’t in chat or don’t even have an account registered.

hello 3ventic,

i got your point. i thought names get fired multiple times when channels have more then 1000 chatters.

but lets exclude this “issue”

you have to understand that i manually counted the list of logged in users from the chat AND api (that basicially the chat use too) and compared it with the userlist inside my bot.

my bot also just cares about logged in users. i do not mean the viewer count showing up on stream. i speak about the amount of logged in users in chat.

so lets clearly say i speak just about chatters that shown up by twitch already inside channels.
can reproduce anybody this issue?

i mean is it technically guaranteed on channels with lesser or equal 1000 viewers that tmi will inform clients about the active chatters correctly?

and finally…

how to bots get it done for bigger channels?
i could call the api to get an more or less actual list of chatters. but then… if 1000 people join or leave in the same time, how to catch this ? i dont believe that tmi sens like 1000+ part or join events…

best wishes


The “viewer” list on site could be cached for minutes while the JOIN/PARTs are cached into batches every 10-30 seconds (don’t remember the exact interval). People losing or reconnecting at an inopportune moment could easily cause a discrepancy. It’s also good to note that you don’t technically need to be in a channel to send messages to it, so if you’re adding people who chat to your list, you could also end up with a higher count.

Hey 3ventic,

Thanks for your answer.

The Point is, do TMI fire all Join and Part Events to insure a correct list of Chatters?

Lets say at least just in Channels with lesser then 1000 Viewers?

So my Loyalty bot can really reward all Users? So nobody “can be mad” getting no points?

Its not bad when the Parts and Joins are delayed or when people loose Connections, at least the events arrive.

Like to be clear. I want to be sure that when a Channel lets say have 100 Chatters that are really there that my Bot will know about these and that not one of them will not get rewards as maybe there was a “missing” Join Event for this Chatter.

Best wishes


They should be consistent to that end. I’m not entirely sure how chat behaves when the 1000 limit gets crossed in either direction.

Hello 3ventic,

well, that is something at least. So bigger Channels would probably need a workaround then…

I will try it with the undocumented call to get the list of Chatters before Join, then hoping for Join/Part events to get fired for huge amount of Join and Leave situations.

A “should be consistent to that end” by a Twitch Staff should be enough to me for the moment to dont give up the whole Project :slight_smile:

Best wishes


A skimread of the post and a reply on mobile: you seemed to have missed the part where join/part/names doesn’t “work” in channels over 1000 viewers/chatters. And so shouldn’t rely on join/part/names at all. Save yourself some code!

The only way that loayalty bots work for currency earned is the use of the UNDOCMENTED endpoint

  1. Hope you didn’t do that in the channels I do dev in
  2. Make sure you read the Developer Agreement, especially the part regarding data retention!

The short answer is: it can’t be properly done at the moment.

If you look at the current solutions out there, they are full of holes, but it’s not easy for the users of those solutions to see that the system sucks. E.g. if you only get 30% of the actual logged in viewers, the users still think the system is working at 100%.

Twitch has a system for Drops, which is basically the same thing, but that’s for game dev companies only. There are no (public) plans to open something similar for 3rd party devs.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.