#developers
1 messages · Page 4 of 1
cosmetic merge 
got a simple question. When someone with a 7tv identity ( paint / badge ) first messages in a chatroom, does it not always come up in the event api??? im only seeming to get when they use an emote. I'm probably missing something but
only if they post from a 7tv enabled client
clients create/maintain a "presence" in a chatroom when the user sends messages
which is what the service uses to determine when to send relevant data
if a client doesnt produce this
then it wont send any info
hmm i'm probably doing somethign wrong then. cause im only getting it when they posting an emote even with the 7tv client enabled
so like if someone talks from chatty or some other client without 7tv
or even on the site without 7tv installed
i'll figure it out, just making sure im not missing something
it wont be creating presences, and you wont get pushed their cosmetics
so if i first message in the native twitch app, my cosmetic will never show up for others until i chat on a client with 7tv
yes exactly that

can anyone review this PR https://github.com/SevenTV/Extension/pull/807
The code quality is unfortunately not really acceptable for usage into the extension
its extremely likely to break
with even the most minor changes to the site
I recommend doing some sort of actual query, just raw accessing massive chains of children is not only very unsafe, but also very unreliable
not to mention nearly unreadable for most people, its not very clear what that is actually doing
well i updated the code. now it gets the live indicator on the player to determine if it is live or vod.
@patent wing hey where can i find the read-only pusher websocket for a kick chat?
figured you'd probably know the most about this stuff
Kick pusher id: eb1d5f283081a78b932c
Their cluster is us2
Once connected to the pusher websocket, you must subscribe to a chatroom by subscribing to chatrooms.{chatroomId}.v2
Then bind to App\\Events\\ChatMessageEvent for messages
To get chatroomId you must fetch this api https://kick.com/api/v2/channels/{username}
with username being the kick channel username
If you use pusher's pusher-js javascript package it would look something like this in typescript/javascript.
import Pusher from "pusher-js";
const chatroomId = 668; // xQc Chatroom
const pusher = new Pusher("eb1d5f283081a78b932c", {
cluster: "us2"
});
const chat = pusher.subscribe(`chatrooms.${chatroomId}.v2`);
chat.bind("App\\Events\\ChatMessageEvent", (message: Kick.ChatMessage) => {
// Message Recieve
});
chat.bind("App\\Events\\MessageDeletedEvent", (message: Kick.ChatMessageDelete) => {
// Message Delete
});
chat.bind("App\\Events\\UserBannedEvent", (message: Kick.UserBanned) => {
// User Ban
});
There are more events you can listen to, but these three are what you probably need.
Here are the typescript types if needed:
interface ChatMessageDelete {
id: string;
message: {
id: string;
};
}
interface UserBanned {
id: string;
user: {
id: number;
username: string;
slug: string;
};
banned_by: {
id: number;
username: string;
slug: string;
};
expires_at: string;
}
interface ChatMessage {
id: string;
chatroom_id: number;
content: string;
type: string;
created_at: string;
sender: {
id: number;
username: string;
slug: string;
identity: {
color: string;
badges: Badge[];
};
};
}
interface Badge {
type: string;
text: string;
count: number;
}
If you decide to use the normal websocket class instead which is a pain in the ass the url is wss://ws-us2.pusher.com/app/eb1d5f283081a78b932c?protocol=7&client=js&version=7.6.0&flash=false
Pusher docs: https://pusher.com/docs/channels/getting_started/javascript/
I created a pure websocket version, but yeah it’s not as clean. Also it disconnects after 1-2 hours of no activity (which I can’t tell if it’s me or the server)
I stopped working on it because without a chat api it’s not super useful at the moment
damn that's a lot of shit
ah right there's a pusher java client
Also, the kick api has cloudflare protection so you need to bypass it by doing some tls handshake spoofing or by using a headless browser like puppeteer.
Hopefully whatever your doing doesnt require the api because it is a big pain in the ass if its not through browser requests like that is the reason why my chat overlay can fetch the api without getting blocked by cloudflare.
did you try to solve that with your uhh desktop kick app
my kick client run on webview which is basiclly a browser lol it handles all the tls handshakes
nope, that was the main problem. I was using the chatroom id as a constant. I never made api requests
soon ™️
^
they have been saying in a couple weeks for months
you can register here for whenever it goes public if you havent already: https://developers.kick.com/
I think they're only going to open it up to a handle of apps
yep hehe

👀 very early work in progress
tauri nice
does the pusher js/ts client not disconnect after long periods? It might handle reconnection itself
yeah i belive pusher-js handles reconnects
😎
"Unnamed Chat Client"
name it "Kock"
like Kick + Talk
KikTok

its not exclusive to kick chats so something more unique would be needed
the ui is very very basic currently
a lot of work is to come

KikKok
yep
Dank Kok
any chance to get kick tab auto-complete fixed? https://github.com/SevenTV/Extension/pull/793
I would LOVE if that were fixed
@hasty kernel @pseudo rivet
Does anyone have code to change colors in 7tv when writing a post? 
forget 😊
where can i follow progress :)
Unnamed Chat Client is my favorite twitch chat client 
oh it's cross platform
that's kinda sick
can anybody explain how to build install on arch
I am a complete bot when it comes to building packages that do not exist on the AUR (edit: sorry, that don't have a buildpkg file to be exact), actually chatterino7 does exist on the AUR but its outdated, I figured asking in the discord the software sort of "belongs to" was the best idea, if you have any guides or guidance?
it will still build a package for latest version
the version in the pkgbuild is just the last time the scripts had to be updated
it will automatically make a package with whatever the latest version is when you build the package
thanks!
How can I tell if an emote is supposed to be combined with other emotes (like RainTime)? It looks like in https://7tv.io/v3/emote-sets/global for those emotes there is "flags":1 and in data there is "flags":256 (whereas for other emotes both are 0). Which one should I use?
ngl I just want a -bin package
I was using the chatterino2-bin AUR package and just changing the URL to the 7tv linux binary
until it stopped being built
but it looks like it's being built again, maybe
Is it possible for 7tv to be converted to a userscript? If so how does one do this?
Some background I am trying to use 7TV in Safari on my Mac... (yes, I know you guys think I am gross) just like safari the most out of all the browsers I've used.
it is possible, but it has not been done yet
it would require some slight changes to the code but for the most part the new extension has been designed to allow for this
it just hasn't been gotten around to yet
if your looking for something you can do right now yourself, you may beable to get safari to load the webextension the way it is now with no changes
you'd just need to have the proper apple only tools to beable to create the right packages to allow for this
which none of our developers have, and why there isnt already a safari distribution
im not sure if there are user oriented tools that allow you to do this easily
but i would not be suprised if there are, its worth looking for sure if you're down to fiddle with things
I don't think you're gross 
last I checked, Safari is the most power efficient browser on Macs
(obveously)
are you implying that Apple sandbags the other browsers somehow?
I don't think they do
but Safari leverages the tech in the system that it can expect to be there
hardware rendering and stuff
I have gotten 7tv working by converting the chrome extension into a safari extension app running some commands with xcode but the damn application expires since. Since its a "beta" app. If we can find a way to get it onto to the app store I have no problem helping with updates. I have gotten it working on iOS and iPadOS as well in the past.
Safari is just well optimized for Apple devices "simple" as that lmao
well yeah they write all of the software stack it uses
so inherantly its going to be more efficiant
you could probably work around this by just setting up a script that runs with a cron task to automatically rebuild it when it would expire
its not ideal, but I don't think distributing on apple's ecosystem is something that is viable for us at the moment
but if you did write such a script, im sure people would be glad to use it if you made it public
what is the benefit of a userscript over the extension? portability?
pretty much
the current extension was designed to allow for distributing as a userscript at some point
the core code doesn't really care that it was injected as part of an extension
I'd have to look into that I am not familiar with writing scripts whatsoever just kinda handy with running commands
except for some minor stuff
here run this command sudo rm -rf /
le epic troll
and just like that I have it working... fully functional
I might have found a way to "distribute" the extension but I will have to look more into it.
very nice
ah I didn't realize the behavior of the chat boxes were different between twitch and kick
need to investigate the up arrow behavior
yeah up/down arrow behavior is wonky too
Here's a shortlist of what I found thus far:
- When colon active, pressing Enter to select emote will send cursor to next line
- (assuming there is a history buffer, i.e. you've sent previous messages) Pressing Down arrow when the input is empty will return the first message on the history instead of clearing the input
- Index ordering of the history when pressing Up Arrow will skip the first message in the history and go to second message
Finally I don't need to care about destroying my 16th PR bajj with a private repo 
so the stale PRs that were closed... should I make a new PR to revive them?
Is there a way to query the api to get the global emotes?
for people who are looking for this in the future, it's just /emote-sets/global
Hey can anyone help? How to get 7tv kick emotes of a Kick.com channel? I tried:
https://7tv.io/v3/users/{kickuser.id}```
ayo ok got it now after a search, sorry
/v3/users/{connection.name}/{connection.id}
I suppose this is the new endpoint? I am still using https://api.7tv.app/v2/users/${twitch.channelId}/emotes for twitch 7tv emotes. Is it soon to be discontinued or why are there two endpoints now? I tried https://api.7tv.app/v3/users/kick/kickid and it also works but takes much longer to load
Hey everyone. I hope someone could help me out with this.
I'm developing a Chrome extension that includes injecting a button to the twitch page. Now I'm stumbling upon the issue that 7tv seems to remove the button after a couple of second after the page onload. Anyone that has the capability to find what is causing this?
are you actually patching react?
its not 7tv thats causing this, this is just twitch rerendering the component
which may be being triggered by some other 7tv change, but if this is the case this will happen any time twitch does this
not just alongside 7tv
ex. your button will probably also dissapear if the channel changes titles or etc
anything that would cause a rerender will cause your manually inserted elements to drop
patching the actual components is quite a bit trickier
and evenmoreso for the component you've chosen to change, since I believe its a functional component
which makes it virtually unpatchable unless you find some other referential backdoor
that you can use in some way
api.7tv.app and /v2 are discontinued and going away November 1st, use 7tv.io/v3
any recommended IRC message parser package?
I always create my own with limited parsing capabilities. Just wondered because seeing that most tools creates their own parsers instead of using a parser package.
if you want just pure parsing and nothing else
Performant, streaming IRC message parser. Contribute to osslate/irc-message development by creating an account on GitHub.
if you want to connect directly to twitch without any fuckery, you can try using this (not sure if it'll work for your usecase though)
@pseudo rivet Appreciate the response. I'll look further into this. The reason behind me blaming 7tv is that disabling the add-on prevented this issue, but I might have been too quick with the blame then.
~~Does 7TV have a standalone JS/CDN? I've got a standalone Electron Twitch client and would definitely enjoy 7tv in it ~~i should have just scrolled up a bit and read the channel history, nevermind 🙂
so how do you change value of chat input? im currently trying to figure it out
exactly the way the extension does it
the extension is just interfacing with twitch's built in system
which exposes mutation via a .apply method
@pseudo rivet I'm guessing there's no documentation on this?
its mostly all reverse engineered
so no
however you may find some usefulness by looking at the library twitch uses for the chat rendering
slate
you'll still have to reverse engineer out the specific methods and actions you can apply
but atleast you'll have a starting point
may not list all possible operations
but its a head start
My implementation has changed a little cus i have very specific use case: "I can throw out the entire content of the chat input and paste in my own"
If you are interested, here is my source code
https://github.com/CaptSiro/pasterino/blob/main/src/platform/twitch.tv/TwitchPlatform.ts (from line 46)
How does this work. You have some sort of widget where you select a copypasta and it inserts it into the chatbox?
yes, exactly like that
I believe the autocompleteinputref has a setInput function
In your case you could alternatively just send a chat message directly instead of using the input box
There is a feature that is just for me where that would not be possible
Dosnt look like we have it listed on our twitch.d.ts tho~
nvm we do
could you explain to me the autocompleteinputref im not familiar with it
export type ChatAutocompleteComponent = ReactExtended.WritableComponent<
{
channelID: string;
channelLogin: string;
clearModifierTray: () => void;
clearTray: () => void;
clearReplyToList: () => void;
closeCard: () => void;
closeKeyboardReplyTray: () => void;
currentUserDisplayName: string;
currentUserID: string;
currentUserLogin: string;
emotes: TwitchEmoteSet[];
isCurrentUserEditor: boolean;
isCurrentUserModerator: boolean;
isCurrentUserStaff: boolean;
messageBufferAPI: any;
onFocus: (v: any) => any;
onKeyDown: (v: any) => any;
onMatch: (e: any, t: any, i: any) => any;
onReset: (v: any) => any;
onValueUpdate: (v: any) => any;
setInputValue: (v: any) => any;
setModifierTray: (v: any) => any;
setReplyToList: (v: any) => any;
setTray: (v?: ChatTray) => any;
showModerationIcons: boolean;
showTimestamps: boolean;
tray: any;
useHighContrastColors: boolean;
},
{
value: string;
}
> & {
focus: () => void;
selectionStart: number;
setSelectionRange: (start: number, end: number) => void;
componentRef: Twitch.ChatInputComponent;
getMatches: (v: string, ...args: []) => object[];
providers: ChatAutocompleteProvider[];
onEditableValueUpdate: (value: string, sendOnUpdate: boolean | undefined) => void;
getValue: () => string;
setValue: (v: string) => void;
};
Some of these could be typed better
But i setValue is what twitch uses when it wants to replace what is in the input box
So just invoke setValue instead of onChange unless there is something im missing
interesting, i will maybe try it out
I think your ChatInput type is our ChatAutocompleteComponent
I think it is Twitch.ChatInputComponent
because of this function in my src:
getChatInputReact(): ChatInput {
return this.getAutocompleteHandler()?.componentRef;
}
but thanks for the insight, right now my patch solution works as i need so i dont feel like changing the implementation unless there is something I'm missing
Do you not block out normal typing in the input box after inserting a pasta?
no
because there are 2 ways to input the copy pasta
I can either press Enter or click on the copypasta in the widget
if i press Enter it will be sent automatically
but if i click it will only be insterted into the chat input
after enter
after clicking
nice
its pretty much the same thing i wanted to do so it will help me a lot. thanks!
golang and typescript

gofur
java 
wait, so there are documented endpoints that don't actually work, and undocumented ways to get that info?
devs are working on a rework of the endpoint
as of right now, we uses gql for most of the query instead of the rest api documented in 7tv.io since it has limited usage
but after the rework, the gql endpoint will not be used anymore and the rest api will get more functionality
right, but why even bother including them in the docs if they don't work and keep pointing people there? Took a bunch of testing on my end and then digging through random messages to find one that finally told me they don't work
this is not entirely correct
as of right now only the website uses gql
which is why it will be going away once the website is rewritten
no other client, internal or third party uses gql
and it is not supported for third party use
generally
Hi All ... am new here but would like to understand how you/7TV protect content to contain malware when uploaded? If I am not wrong even anonymous could participate uploading content, correct? Thank you
all emotes pass through transcoding at a point
anything not important gets stripped away
even if you could upload as anonymous you wouldn't be able to put anything in it
What kind of malware you can put in images anyways
none
unless your on a computer from 1995
(which wouldnt support modern image formats anyways)
(back when literally all data was trusted and buffer overruns were acceptable and also data was allowed to be executed by the cpu)
all you had to do was make the image overflow the buffer
and add a jump opcode
and you could execute anything
but it has not been like this for a very long time
it would be incredibly rare
a catastrophic failure of modern standards
like complete incompetence
A major exploit in libwebp was discovered last week, so any browser not updated recently is currently vunerable
Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.
FeelsGoodMan
Either way though what I said above is still true
It's not RCE so it's not 'malware'
It could probably do serous damage on the site though
it would be much much harder to simoultaniously leverage this into code execution
and then on top of that a sandbox escape
Is there any ETA for the gql api docs to come out?
I'm pretty sure they dont intend to put out docs since its meant for internal use, not public.
I believe i heard they are moving towards REST endpoints which will take over the gql ones somewhat soon, and gql will be dropped.
peepoSad
soon 

what exactly do you want to do?
you can check the gql usage in the 7tv site by inspecting the gql queries (e.g. search emote for example)
No GQL API's are officially supported for third party usage
and as stated above they will be dropped sometime in the near future
potentially without notice

however currently it is the only way to do mutations for a ex a bot or service
these applications are still not supported though, as there is no current mechanism to obtain a token for usage
Hey, was there any attempt at fixing https://github.com/SevenTV/Extension/issues/635 ?
I tried looking into it, but I can't seem to find the issue
At the moment I am using stylus to get the default scrollbar, but it's not ideal, thank you
I am trying to dm @rancid tendon
how’s the development of the new site going?
there's no api route to add emotes to a set, right?
there is, but its not officially supported and will be changed soon
ah, i guess through the graphql api?
yes
you can check the gql requests in the developer console
but as mentioned, gql will not be publicly available and will move on to use REST api instead
so you can just do gql now for the lols, but note that it will not work after the system is updated
we probably will keep the gql api as is for now, but will move over to REST, and just no longer update the gql api until it breaks
so if you decide to play around with it, you'll have some time to move over to the upcoming rest api before it's removed
Can't install deps with npm for the website
problem with fontawesome package?
Yea actually
I tried relogging in to npm and doing that config delete and still issues
"@fortawesome/free-brands-svg-icons": "^6.2.1",
"@fortawesome/free-regular-svg-icons": "^6.2.1",
"@fortawesome/free-solid-svg-icons": "^6.2.1"
},```
gotta change the packages to free ones since some icons are paid
and have to change some icons in the site as well
Ah shit okay I'll take a look, thanks for the info
a bit pain in the ass to do
but im not paying for it 
Yea 
https://github.com/SevenTV/Website/compare/dev...WaterBoiledPizza:Website:freefontawesome
this one is from a while ago
not sure if anything has changed
That's more than I expected, okay thank you
CORS
Messing about and I'm not seeing how avatar_url is undefined within UserCard depending on the parent component/page.
I'm successfully retrieving the user data and specifically avatar_url whenever I'm on EmoteRoot or /users/. avatar_url is defined on render.
I'm successfully retrieving the user data but avatar_url is returning undefined whjenever I'm on EmoteCard or /emotes/. To clarify, the network call is successfully returning and the value for avatar_url is there, but whenever I try accessing it on render it's undefined
don't bother messing about with the old website code
Why?
not quite sure but probably sometime within the following months
or rather are you all even accepting PRs now?
its not currently in a workable state
but development is happening at SevenTV/WebsiteNext
and SevenTV/WebComponents
uh I mean if they're working I don't see why they wouldnt be accepted

but Its probably not worth putting effort into
something that's going to be replaced
the codebase for the current site as im sure you've noticed
is not the cleanest
Meh I'm just working on QoLs
or the nicest to work with
I can't comment on it much, my gripe is with not being familiar with Vue moreso than the codebase
speaking of QoLs that shouldn't have effort put into due to the website being replaced in 2025, I've been working on a doc that contains some outstanding bugs that I would personally like to see fixed
Website Emote upload page Maximum size requirements Emote preview, like FFZ FFZ lets you preview emotes in chat, with light and dark mode, and optionally the 2x DPI sizes This would help people realize that emotes don’t need to be 2048x2048 when they’re gonna be 32x32 in chat Subscribe page ne...
either because they affect me personally or it's annoying a lot of users
updated this doc
@pseudo rivet are you currently implementing ssr for web components?
for what?
I don't think its really applicable here
ssr is mostly a hack for when you need compatibility with non js agents
there aren't any benifits for agents that do support js (since the hydration step is computationally equivalent to if you just started from scratch)
and I think the vast majority of the user base are using modern browsers
for an emote platform that relies on js to run in the first place
the website isnt really static content either, I dont think ssr makes a whole lot of sense here
the webcomponents packages are being built to be consumed explicitly by the extension and the website
neither of which will be using SSR
SSR isn't really something that would be viable for us anyways
its massively server intensive
for very little benifit in our case
(the server is basically emulating a browser fetching its own page, running that JS and then serializing it afterwards)
only for the client to then do the exact same thing again
but for it to do this it does have to run an entire virtual dom and javascript vm that gets spun up for each and every request
its very much a hack
imo, it doesn't really make sense in the current state of the web for 90% of usecases
because almost all of the usecases where ssr would actually be benificial
for example in the case of static content, universal/at build time pre-rendering is a much preferred option
but in our case almost all of our content is dynamic
I was just wondering what the hydrate part was in the webcomponents repo
ah
its for the API wrapper
all values the wrapper will return are hydrated
meaning all their prototypes match and are checked
an emote set will always contain actual emote objects
that can be used in other parts of the wrapper
or have methods
directly on them
yeah but is hydration the right term for this
barely
but its close enough
its not a type checker
its scope is explicitly limited to "hydrating" objects
for example an input object's children cant be mapped to other keys
its direct
.x on the input value can only affect .x on the output hydrated type
So a validator I guess?
ish
not really though
it can be used to validate
but by actual emote objects I mean in this case actual classes
from json input to fully typed class output
this also lets us do things for the wrapper like allowing subscribing directly from objects
and allowing in place mutability
because all types have a runtime stable schema
So like this? https://github.com/samchon/typia
yeah there are definately equivalents
this fits our use cases though
and is extremely small
like 80% of all that junk
is just for typescript
the original implementation was like 100 lines
Was just wondering because I've heard that web components are pretty limited
In what you can do with them
the webcomponents package is also a bad name
ignore my names
they're not actually webcomponents
they're just components for the web
horrible name

webcomponents is a standard
but we're not actually using webcomponents
most of the "components" are vue
Fdm
the packages in /webcomponents dont have to be used on the web either
they're just npm packages
they're named that because all of our uses of them will be on the web
in the webextension and website
internet pieces
Tauri mobile 7tv app is coming 
first party Chatsen style app
with integrated twitch and kick viewing
with adblocker

anyways
@solemn widget hopefully something like this better illustrates why its more of a "hydrator"
than a validator
even though it also inherantly does validation
notice how each member becomes fully instantiated
(this is also just for illustrative purposes, that new() at the bottom would throw immediately and wouldn't actually produce a valid emoteset object)
no
that's the typescript part
without it the code is functionally identical at runtime
but you wont get intelisense

its weird js/ts dankness
typeof Class in typescript means that classes' constructor
which is also its static side
classes in typescript occupy the same symbol with two distinct values
the type sharing the name of the class refers to its instantiated type
saying "typeof" forces typescript to use the type of the VALUE under that symbol
which is itself the constructor function
Oh I see that makes sense yeah
which also contains the static side of the class
so by adding that <typeof ThisClass> you're telling typescript
that this is the final extension
and the values defined by this classes' static fields
is the one the constructor will ultimately read
saying as const allows the compiler to know for certain the values will never change
allowing the dank inference stuff in hydrator.d.ts to work
a schema like { type: "array", children: "boolean" } produces the typescript type boolean[]
but you can also do recursion
the children field of a schema can accept any other schema
you can also do conditional parsing
a schema like { type: "array", children: current => typeof current == "string" : "string" : "number" }
will be typed as Array<string | number>
and at runtime will run the transformer for the unparsed value
transformers run before hydration
so this value [1, "2", 3] would be accepted
yes
this will also integrate with the eventapi wrapper
for example if you want to have live updates for an emote in a set
you can just say eventapi.subscribe(set.emotes[4])
and only that emote will receive updates
in place
if you dont want inplace updates
you can do .clone() first
In place as in mutating?
yeah
mutability is not implemented in what is pushed
but it will be a seperate base class
not all hydratorobjects are mutable ones
Ehhhhhhhhhhhhh fdm
it will likely be HydratorObject -> APIObject -> APIObjectMutable
mutable classes having their own methods for generating eventapi subscription conditions
I'd rather have the ability to just set a callback which would execute on update
well yeah thats also how it will work
you can just subscribe to a condition manually
this is just a helper
so places in the website can use composable's and never care about the actual implementation details
Yeah that makes sense
the emote set page doesn't care at all about how to subscribe to emotes
It would have "no logic"
or how to mutate their data
Would the emote set be the current active emote set? What if the user changes the emote set to an entirely different one?
it depends how you fetch the data
some of this makes sense only for the website side
Yeah the mutating part for example
in the case of that example
where the user changes emote sets
the emote set data would not change
because an emoteset class represents a specific object
but the UserConnection object
would reflect that change
its emote_set field would be replaced with a new EmoteSet object
this is already how the eventapi represents these changes iirc anyways
Yeah that makes sense I think
i also intend to allow passing a callback that receives the changemap
when subscribing to objects
this is where you'd gather application specific information
like figuring out what message to display to the user
after a mutation
the hydrator implementation doesnt care about this type of application specific usage
it just generalizes the mutation and subscription of certain types
to be more useful as a "wrapper"
Mhm yeag
Wait until the API update drops
will do
https://7tv.app/emotes/6308318fb5644c9aa12488cd This emote has several versions uploaded, but trying to add any of them to a channel always adds the oldest version for me. can anyone else see if this happens for them as well?
can easily tell by the speed of the emote
ive had this happen and after restarting chatterino it was the right version, idk if its the same issue
i see it in both chatterino and the browser chat
i just added it and the slow one shows in native chat, fast one in chatterino
interesting
you're using the 7tv extension or do you have 7tv emotes enabled through ffz
7tv extension
same for me, wonder why it's different
yeah its weird. they are technically seperate emotes too, since the emote ids are different
yeah, it shows me the original emote ID too
classic seven televisions
not a chatterino bug last time i checked
we get the first version sent and optimistically add it; you don't need to restart chatterino - wait for a few minutes for 7tv's cache to expire and press F5
also please report issues on github - it's a bit more visible
Did some poor googling, but couldn't find it on the 7tv site but is it possible to implement 7tv directly in my app instead of relying on users to have the extension installed?
7TV Developer Portal.
Awesome, thanks you!
Is there any way to replace Emotes in a string?
For example you have "Hey LULE FeelsOkayMan" and you get a HTML Element with the Emotes as Images replaced?
Hey there everyone! Is 7tv open source? I would love to make some contributions to the codebase
Awesome, I appreciate it! I'll take a look
Which team here works on the project?
I'd love to collab on some of the work
Keep in mind that the devs are working on a big update to the website
so any pr under website would most likely wont be accepted since those wont be relevant after the big update
what do you want to work on specifically
I'm happy to help wherever I can, I specialize in frontend, been doing it for about 7 years professionally
UI/UX
not sure if devs need help with the website now
but i guess you can get yourself familiar with it first https://github.com/SevenTV/Website
you can check these out for the Website:
https://github.com/SevenTV/WebsiteNext
https://github.com/SevenTV/WebComponents
Development repo for the ongoing 7TV.app website rewrite. - GitHub - SevenTV/WebsiteNext: Development repo for the ongoing 7TV.app website rewrite.
sus, Also is the api down entirely?
what do you mean by that
wait nevermind
it's just a hello world 
Web extensions and chatterino are not loading out
edit: ok nevermind it's up now
recently event api outage happens more frequently at this time of day
WHAT'S WebsiteNext ABOUT
leaves
Melonify Anatole - can I provide QA for new website? 
new website: hello world 
^
The H in "hello world" should be a capitalized

do you guys have issues with requests taking longer than normal
yeah if an emote doesn't load fast enough it just doesn't load at all ever
feel like it should retry after a little bit if it times out
any clue why?
that's what I want to know
I've always wondered if the "no cache" would have problems in the future
since cache usually exists for a reason
but I don't know much about networking stuff so I just trust the experts
wait no cache wdym?
if nothing for 7tv is being cached that could be the issue, but then it shouldn't take that long to load a website from scratch lol
takes 10seconds-1 minute everytime i've went to it in the past few months
yes but there are many thousands of other people also trying to load the website these days
in my mind, that sounds like a bad time
but IDK how it's set up
do I look like I know what the heck a CDN is?
lol yeah i don't know much about it either however i am curious

forsen
Does the new api allows searching user by connections?
Hello there,
Wondering if it is possible to get Emotes by name with the 7TV API ?
Tried going with "https://7tv.io/v3/emotes/reckH" or "https://7tv.io/v3/emotes?reckH" for example but it does not work. Only IDs seem to do it.
Getting "[{"id":"","name":"","owner":null,"visibility":0,"visibility_simple":null,"mime":"","status":0,"tags":null,"width":null,"height":null,"urls":null}]"
I'm currently trying to display 7TV emotes within a StreamElements chat widget. Does anyone know a way?
The default SE Chat widget doesn't currently show them, unfortunately 😦
Thank you!
not all of the documented REST api works
the REST api will fully be usable in the future
you might try the GQL api, but it wont work in the future once the REST api is completed
Why would you need to do that?
Thank you for your responses,
Well, 7TV emotes are not being spotted by the StreamElements event listeners (unlike BTTV and FFZ). So I thought about checking for emote names in chat messages to get them via the API and display them if found. Or maybe there's a better solution?
Uhh yea there is definitely a better solution lol that's a terrible idea
Simply get the appropriate emote sets and use the event api for live updates
A service which provides live updates for various resources implementing the Server-Sent Events and WebSocket specs - GitHub - SevenTV/EventAPI: A service which provides live updates for various re...
Oh right, wasn't aware of the EventAPI, thank you for this
how does the chat detect emote usage anyways
is it if chat message contains word from emote set, change text to corresponding emote image?
Yes, that was the idea. As dumb and inefficient as it sounds ^^
the emote set data returned from the api will contain all of the information you need to render an emote
if you know an emote is in the set, then you should also already have everything neccissary
including image urls etc
there is no need to query the api, you'll just get the same data you already have
Yes, thank you, I got it working with the emote set query 🙂
Where to find global tag for obtaining global smiles?
i found everything in the chat
Hi guys, I just joined. Im going to the point. I was using the Zaytri chat bubbles you maybe know there is no support for 7tv on that extension, but was really easy to modify the code and add it, was almost prepared.
Now im trying to adapt it to the v3 api.
...
sevenTV: {
api: 'https://7tv.io/v3/emote-sets/global',
transformer: response => {
const { emotes } = response
return emotes.map(emote => emote.name)
}
}
}```
```async function loadGlobalEmotes() {
for (const [key, value] of Object.entries(GLOBAL_EMOTES)) {
const { api, transformer } = value
const response = await get(api)
if (response != null) {
Widget.globalEmotes[key] = transformer(response)
}
}
}```
```window.addEventListener('onWidgetLoad', async obj => {
Widget.channel = obj.detail.channel
loadFieldData(obj.detail.fieldData)
loadGlobalEmotes()
...```
For some reason im not being able to draw the emotes. I like a lot this overlay chat, I would like to keep using it.
Sorry if this is a lot haha, im not sure what im doing. I can give more information if you think will be useful
You know they made that just because they hate 7tv right? 
This is the most big dick idea i've seen
Yeah I know but the code is accessible and easy to modify hahaha
HOOOOOLY
I was using the v2 till some days ago
yea v2 support is dropped today
#news message
yeah but im not being able to render the emotes with v3, probably im missing something
https://github.com/zaytri/stream-elements-widgets/commit/17a7790c45eee483fb29a31b28ad67c8420c01b2
how about if you reverse this commit
Thats what I did using v2, just changed that false to true and was working
hahaha
but now with v3 I suppose we also need to change the way to recover the emots from the api, and thats what I was trying to do here
#developers message
I also changed the 7tv to sevenTV
is it possible to catch personal emoji from a message on twitch?
or will have to check each user for the presence of personal emoji with a subscription
this is interesting backstory that I didnt know
so this is why they "care" so much
they implemented 7tv support in the beginning, but then decided after they didnt like it
but they felt like they needed to justify them implementing it
that'd be le epic troll though @ocean pelican
you'd need to change slightly the parser though
because the data formats are different between v2 and v3
but if you did and then made a pr for it that'd be 
just fixing the support you never actually got rid of
I agree that would be great trolling hahaha
but I dont want to cause any trouble, I just think that not having 7tv support in the chat extension is a ridiculous drama (and we can fix it)
Huh interesting lore
smh
idk how 1 guy gets to determine which emotes people can use
that's never a good thing imo
We're also aware of an elevated amount of slow or error responses, we are investigating and hope to provide a full resolution shortly.
Does this refer to the requests that coming back with "*UnknownEmote" response with as 200 code? Not sure if I should create an issue for this or not.
CC: @hasty kernel
Like a pokemon?
suggestion for the api - can you guys (or me) add some sort of example for each endpoint in the database so we can make the frontend easier for newcomers
was planning on updating the 7tvio frontend once the new update comes out
Is Melon roaming these halls atm?
@pseudo rivet 
bubu dares to ping him 
i bet youre gonna ask about the ffz addon
mabe 
they're actively working on a patch
Ohh it was him who fixed it 
as of today


for v3 cosmetics
Yes, I am working on a patch with the help of Melonify 
Also hello gamers
I can't promise anything but so far I got basic namepaints and badges to work. Still need to do more testing, and also get proper emote sets + personal emotes working.
Maybe ready by the end of the week, but I can't promise anything 

🐐


Hi everyone! Hope you're having a wonderful monday!
I'm trying to integrate 7tv emotes in my custom chat but it doesn't work.
Can someone help me with the endpoint to get the emotes by name?
7TV Developer Portal.
Thanks!
I want to get the emotes available on a Twitch channel. Previously I used the https://api.7tv.app/v2/users/<twitch id>/emotes endpoint and I'm having trouble translating that to v3.
https://7tv.io/v3/users/<twitch id> returns empty, as does https://7tv.io/v3/users?query=<twitch id>
Am I using it wrong?
if you have a twitch id you can use the
https://7tv.io/v3/users/twitch/<twitch id> endpoint
@tough pasture
Worked immediately, thanks!
👍
hello im trying to download it on opera gx and it doesnt work
this in poland means download failure
The 7TV docs and website needs some minor update I think. Like a bit more information and all. Would be cool, since it lacks some information and a nicer look to it.
Not "It" btw 
but i can download this at google chrome
only not on opera
@fallen sentinel I was not talking about your problem but about the 7tv dev docs and the poor state of the dev docs
Also if you are having issue with 7tv as a plugin, you are in the wrong channel as here it is for developers, working with the API of 7tv to build apps and shizz
Also please move to #help-old if you need help
There will be a new REST api soon™️
So the doc will be updated by then
For now, if you just want to test out stuffs, you can try GQL
It is not documented in 7tv.io, but you can check its usage in the Network tab under the developer console
Note that GQL will be dropped when the new REST api comes out
@paper plover petition to only change the api or url max once every 2 years after this 
api extremely slow for anyone else?
api extremely slow for anyone else?


that’s the last thing that needs an update
only thing i do tho lol and it’s kinda shit rn
It’s gonna be updated when the whole website gets updated
the dev page is like the lowest priority atm
we are getting the api update anytime soon right?

How can I add emotes to a special emote set using the API?
you'd need to use the gql api which isn't documented but viewable from the f12 network tab
do you have a link for me?
Are there any examples or is there nothing at all?
yeah and theres that
okay
Are there examples for the REST API? I didn't really get any further with the docs
We're working on updating the REST API
Until then the gql api is kinda your only option, but it's a bad option

no there's no example for it right now since it wasnt meant for public use in the first place
and it will be removed when the upgraded rest api is implemented
but if you want to implement it now
head over to the developer console -> network tab -> filter with gql
simply do an action, e.g.: im am adding the emote https://7tv.app/emotes/638767f24cc489ef45239272 into my set https://7tv.app/emote-sets/60ae3cb1b2ecb0150521fa1f
and check the gql request payload to see how to request the change
then just request that gql packet in whatever program you want to use:
I'll say it again, I really don't recommend using the GQL API. It'll probably be completely disabled in a matter of months
but there's no other way to do it now 
is there expected to be any buffer period between the updated REST and the GQL being disabled
Yes, but not much, since it's not meant for public use
About as long as it takes us to move the website & extension over to REST once it's ready
but an exact date for the update is not yet known?
Nope
is there going to be like an announcement when the api is released, prior to the website/extension migrating to the new requests? So we have time to migrate as well?
there was a grace period from v2 api to v3 api migration
surely they will do the same by that time 
Is the EventAPI working as usual? My requests are kinda being denied because of CORS
Or is it this https://github.com/SevenTV/EventAPI/issues/121 ?
Pretty sure it's the 503 but CORS bad 
event api is down for event stream but is working fine on websocket. I'm having the same issue I think. Status code 524 for my kick chat overlay.
having a problem with the websocket version - if i send a twitch entitlement request, such as {"op":35,"d":{"type":"entitlement.*","condition":{"ctx":"channel","platform":"TWITCH","id":"548015560"}}}, i get the expected {"op":5,"t":1701552613625,"d":{"command":"SUBSCRIBE","data":{"id":2368589574,"type":"entitlement.*","condition":{"ctx":"channel","id":"548015560","platform":"TWITCH"}}}} back, but if i try the same for kick, such as {"op":35,"d":{"type":"entitlement.*","condition":{"ctx":"channel","platform":"KICK","id":9508143}}}, the connection drops on me. no idea what youtube does
do kick IDs need to be strings?
looks like that is the case - which is kind of anoying since the https://kick.com/api/v2/channels/[CHANNEL_NAME] request returns integers
considering you put the twitch id as a string, probably?
twitch IDs, despite always being numeric, are still strings everywhere. kick ids are actual integers
but since youtube ids are also strings, i get why that was kind of the expected data type
I checked, we use strings for all ID's internally
good to know
At least in our database, surely that carries over to the API & event API
is there a figma for the sites design somewhere? i kinda wnna experiment a little
there is one for the new upcoming redesign, but idk if that one's public or not
rip
i'm not receiving any subscribe ACKs from the SSE server. yes to heartbeats, though
example requesting url: https://events.7tv.io/v3@user.*%3Cobject_id%3D61cb91e40bf63003719445cb%3E%2Cemote.*%3Cobject_id%3D61cb91e40bf63003719445cb%3E%2Cemote_set.*%3Cobject_id%3D61cb91e40bf63003719445cb%3E
yep its broken, just tried it.
https://events.7tv.io/v3@entitlement.*%3Cctx=channel;platform=KICK;id=676%3E,cosmetic.*%3Cctx=channel;platform=KICK;id=676%3E,emote_set.*%3Cobject_id=612bbd809d60d44d5240b3dc%3E
no subscribe
also tried with a single emote.* request for simplicity

EventAPI works, finally 
Sup, quick question about the V3 endpoints that take query params, can't wrap my head around to how the they look like, V2 example would be https://api.7tv.app/v2/users/{channelID}/emotes
V3 says that the channel Id is a query param, but I have not figured out the name of the param to be passed yet
https://7tv.io/v3/users?query=XXXXXX
https://7tv.io/v3/users?channelId=XXXXXX
no clue
nvm, seen a comment on this channel, so it should include the platform, but yeah, couldnt figure it out solely from the docs
the docs are bad atm, it's on my todo list
all good, i got it to work again with the new url and a couple of model changes
ah, and a curiosity .. this time i managed to find the global emotes URL in the debug logs that 7tv does https://7tv.io/v3/emote-sets/global, but not on the actual Network tab .. i might be extremely tired, but i'm not sure
anyone doing advent of code 
ofc!!
just spent 30 mins pulling my hair out due to this: https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
fucking css
fucking chrome
bruh just play CS2 at this point
BWAHAHAHAHAHA
For the new site please make it so if an emote upload fails, allow users to retry the submission if they change any setting
I don't know why we force users to refresh and resubmit everything to begin with
Is there any plan for YouTube now?
Currently I made a userscript as a workaround, it just requests a specific emote set JSON and replaces emote names with images according to the JSON
Just want to check things to notice if i want to rewrite and contribute to the extension
you currently cant even link youtube to your 7tv account, so it is kinda pointless for now
can some1 review this pr
https://github.com/SevenTV/Extension/pull/972
Yoo, any other ways to fetch user's following channels?
The main API is deprecated as you know.
(twitch)
Not possible afaik twitch has retired that possibility altogether

If anyone is available, pls review this pr https://github.com/SevenTV/Extension/pull/978 
Also; if anyone is having issues (the one where it stops you from scrolling, similar to the issue that occurred on the Twitch recap page) with the "new" layout (the experiment) you can try out the branch to see if that fixes it. I'd love some feedback
Scrolling through the streams inside of a specific category can lock up after initial page load / while scrolling down.
This issue seems to happen because the AvatarsModule patches and re-renders t...
@exotic sigil are you currently working on https://github.com/SevenTV/Extension/issues/979 ?
no but I could reproduce it
oh yeah I know lol

what's up chips
oh just the video stats bug lol
oh yeah, it's quite weird.
if you look at it as is, you'd assume it would work as expected
yeah.... I haven't looked at things in a while
yeah I get it
idk if you want to look into it, I did a little bit so I can give you some direction if you'd like
that's fine 
seems like it wasn't actually your code causing it lol
Great, I found a fix! (:
although I must say it's not too great so I'll probably have to figure out something else

cause why not :)
I’m exited to try it out
Imagine a way to combine the rooms so you could have xqc’s twitch and kick chats merged
Could be kinda cool
Send your messages to both
would be pretty easy with how I have structured the code
it kinda combines twitch and kicks different message types into one
no tech debt
niiiiice
That way I can be an offline chatter and an online chatter at the same time


wouldn't it be based
if it sent messages in both chats too
(no, no it would not be)
It would be based
Because of the way people use xqc’s twitch chat when he’s on kick
My messages wouldn’t be out of place there, personally
But yeah its usefulness is limited.

Is this available yet? I’m dying to use it
i tried it and its still buggy 
its clean 
yeah its cool
But unlike chatterino
its based on whoever chats

But who knows. Maybe you did hear something about that
It would also be a Melon answer
Yeah
If you can see it on the website , it’s obviously still available
Just gotta get it somehow
it might be based on 3rd parties
get ivr to host an endpoint for it
i mean theres already public endpoints for it
PRRRRRRRRRRRRRRRRRRR
SOMETHING

like bro
if you cant see chatters, why have this?
Hi Ryan

yo
i get mods can see it but bro
For moderators 🤓
Someone is riding a dirt bike or some kind of motorcycle around out there and it’s 2 am. I hate it so much because I wish that was me.
I’m JELLY
not self promo https://www.chatlect.com/
yeah
obviously
you can use a token from the twitch website itself and make a request for the viewer list
is there a rate limit on emotes? on https://cdn.7tv.app/emote/<id>/4x.avif
but why is chatterino not doing that?
because 
its TOS i was told
But I don’t care about breaking tos
but chatterino does
would they sue you or just ban
hey any thoughts on how to get 7tv working in a twitch chat embed?
ffz works, and i tried using the ffz addon for 7tv
but since ffz is absolutely trash it still doesn't work
Embeds are not currently supported, but maybe in the future 👀 https://github.com/SevenTV/Extension/pull/964


hello, why i cant search for emotes? is the requerst wrong?
@paper plover 
That rest api is not a thing yet
for now you can use the gql api,
#developers message
#developers message
but note that the rest api is still in development, and once is officially a thing, the gql api will be discontinued and abandoned, so you will need to update your code to use rest api by then
ok thanks so much!


you could double check the query against the website's request. just open dev tools and perform an emote search and copy the gql query from there
what's your {{url}}?
try with https://7tv.io/v3/gql first perhaps
my query for reference:
query SearchEmotes($query: String!, $page: Int, $sort: Sort, $limit: Int, $filter: EmoteSearchFilter) {
emotes(query: $query, page: $page, sort: $sort, limit: $limit, filter: $filter) {
count
items {
id
name
state
trending
owner {
id
username
display_name
style {
color
paint_id
__typename
}
__typename
}
flags
host {
url
files {
name
format
width
height
__typename
}
__typename
}
__typename
}
__typename
}
}
variable:
{
"query": "forsen",
"limit": 40,
"page": 1,
"sort": {
"value": "popularity",
"order": "DESCENDING"
},
"filter": {
"category": "TOP",
"exact_match": false,
"case_sensitive": false,
"ignore_tags": false,
"zero_width": false,
"animated": false,
"aspect_ratio": ""
}
}
the problem was in the url lol, the url variable has / at the end
The "must include input" mode of the colon-completion looks weird
It seems not listing emotes including the input when an emote starting with input is found
not always 🤔
@deep dagger #developers message
to request the mutation without much code, you can use Postman as such #developers message
thanks man! Really appreciate the pointer! Will try to figure out this graphql thing and get something running! 
Hmmm, how do I activate the Twitch Emote showcase? It doesn't show anything rn...
hello, any chance of the developers to add an PNG emoji option to the api? Unity doesnt support neither AVIF or WEBP 
If the image is static, the PNG version is usually also included in the cdn
u only need to change the file extension from .webp to .png
e.g. https://cdn.7tv.app/emote/6042089e77137b000de9e669/4x.webp to https://cdn.7tv.app/emote/6042089e77137b000de9e669/4x.png
oh cool! that works wonders
ty
Unity?
the game engine
yes
but why are you using the 7tv api in a unity program?
and why don’t you just implement an avif library ;)
i see
https://assetstore.unity.com/packages/tools/utilities/avif-loader-237189
Anson will pay for it 
cringe that it costs money
well
I guess it’s a shortcut
you could implement it yourself
but that takes skill and time

its too much of a hussle, theres too many steps to make a moving image work efficiently in Unity
not worth the effort 
i did it
i did solve the weird json formating 7tv has to give me the names and the id of each emote a channel has
took me a while 
now im allowed to go 
I am once again asking for your reviews... 
If anyone noticed some issues related to suspicious users not being highlighted and clips not being embedded, please try out the branch and let me know if it fixes it.
is the global emote set on 7tv https://7tv.app/emote-sets/61d2f5b3825ae71d82bf37a8
the only one that is shared among all channels?
this and yes https://7tv.app/emote-sets/659ad13b8cfff8b456efabda
gotchaty
does that combines both?
no the first emote set you sent is not the global emotes
that was the channel emotes for the 7tv twitch account
i dont think this one is global emote set
just for the devs to test emote set i think
ya i used the global set only
mods crush his skull
ryanpotat should have used $nap instead: (automated: afk for over 30 minutes) 💤 (45m, 7s ago)
$rafk
ryanpotat, Your AFK status has been resumed.
@misty olive mods crush his skull!!
danks
👍
What is the max uri length for the event api? I'm getting an error about it being too long, but I can't find any info about the max length 
if you're running into max uri length, I suspect you're not using the api right
It says to use inline event subs in the docs "The endpoint for managing subscriptions is currently unavailable. You may use Inline Event Subscriptions in the meantime."
And I assume I'm not supposed to have an eventsource for each thing I want to subscribe to
I think gql is the way to go here
someone that's actually used it can answer it better than I can
2^11

What are you trying to achieve with the event API?
If the URI is too long, maybe using a websocket connection is smarter (I know that was the way to go for the FFZ addon)
Dynamic un-/subscription from topics etc.
im doing this contract job and they asked how they can embed react into a wix website
Add the ability to use native React APIs (components and hooks) to Velo, by creating a React structure which corresponds to dynamic elements in the editor. React Velo supports React native APIs (ref supports only ref callback syntax and has a slightly d. Latest version: 1.0.51, last published: 10 months ago. Start using @wix/react-velo in your...

jquery + react baby
surely they change their mind
that seems cursed
I agree, it definitely looks cursed
they decided not to go with wix
at least it wasn't wordpress
hi
hi
hi
hi
hi
hi
hi
hi
noo it was supposed to be an Interest: Stage role after regress
for perfect mirrored colors


Trying to probe into a specific issue in the API, cloned and opened in GoLand and I'm getting errors (i have no idea how Go works) but its saying i need GOROOT or something and need to download an SDK
anyone mind letting me know what SDK i need 
do you have the actual compiler installed
i have zero idea what i actually need thats why i joined to ask 
(no i dont)
ah alright






no clue
