#developers

1 messages · Page 6 of 1

frosty bronze
#

pretty sure its the monorepo one now

strange owl
#

are you able to merge that on it's own. I'll have to dig into highlights for pinned message support

#

so technically both I guess

paper plover
#

is the usage the same as the old one
or a new doc comig out soon?

strange owl
#

good question.. I'm not sure. As far as I'm aware, there were some small modifications but it should be pretty much the same right now

frosty bronze
#

it was an in-place replacement yes to reduce server costs

#

new api will come out later

#

also who made the new discord icons

#

they're nice

strange owl
#

they are quite nice

#

I think Anson? not sure

next tundra
strange owl
#

there you have it, thanks Niklas Okayge

trail drift
#

Hmm did cors get enabled?

sudden gust
#

@real sorrel You're working on chatterino7 right?

#

Can you tell me how do you currently render paints in chatterino?

#

The current paint system is heavily tied to css properties but chatterino seems to be 100% c++

#

Do you use some sort of web renderer or do you just compute it all yourself?

solemn widget
#

seems like just

#

qt gradients

#

and stuff

sudden gust
#

Hmm I see

real sorrel
sudden gust
#

I'm asking because I was thinking about making the new paint system plain css

#

But that's not a good idea then

paper token
#

BASED qt ||AYAYA||

sudden gust
#

Otherwise, this would be the format for the new api:

{
  "layers": [
    {
      "type": "single_color",
      "data": 16711680,
      "opacity": 1
    },
    {
      "type": "linear_gradient",
      "data": {
        "angle": 0,
        "repeating": false,
        "stops": [
          {
            "at": 0,
            "color": 16711680
          },
          {
            "at": 1,
            "color": 65280
          }
        ]
      },
      "opacity": 0.1
    },
    {
      "type": "radial_gradient",
      "data": {
        "angle": 0,
        "repeating": true,
        "stops": [
          {
            "at": 0,
            "color": 16711680
          },
          {
            "at": 1,
            "color": 65280
          }
        ],
        "shape": "ellipse"
      },
      "opacity": 1
    },
    {
      "type": "image",
      "data": "01HT54Y68ETMF2GNFYJS52ZPYE",
      "opacity": 0.5
    }
  ],
  "shadows": [
    {
      "color": 16711680,
      "offset_x": 0,
      "offset_y": 0,
      "blur": 10
    },
    {
      "color": 65280,
      "offset_x": 0,
      "offset_y": 0,
      "blur": 10
    }
  ]
}
solemn widget
#

yeah it needs to be like that to be cross platformish

#

to be fair

#

you could just like

#

make a thing to directly ship css instead as long as you also keep something like this

#

for like the extensions and other things which will want to integrate with it

real sorrel
#

as long as I can parse it it's fine, but I don't really want to refactor a bunch of stuff, so JSON would be pog

sudden gust
#

Ye will keep it json then

sudden gust
solemn widget
#

yeah idk

sudden gust
#

But that shouldn't be too complicated

real sorrel
#

will that be on the v3 or v4 endpoint?

real sorrel
#

oh and for chatterino updates: the client will now try v2, v3, and v4 in that order to search for updates (it ignores the html from v4 currently)

sudden gust
#

I know v3 is the current rest api

strange owl
teal thorn
#

Is the new extension repo good to open pr's too or are you all still working on it? I dont wanna open one if you guys are still working on reqriting it

frosty bronze
#

I’m not sure if they’re accepting new features right now. It’s mainly been bug fixes

teal thorn
#

ok thx!

trail drift
#

when I get requested the cdn gif url i got this large string but idk how to decode it

paper token
trail drift
#

hmmm

paper token
#

assuming there's more to it than just what I can see in the screenshot

trail drift
#

its a pretty long string

paper token
#

it does say "file" so I'd assume it's literally just the gif in text form

#

the url is also there

trail drift
#

it looks like U int8 to me

trail drift
paper token
#

ah

trail drift
#

i saved it as a txt and changed it to .png and its a broken file

#

so i dont think i can do that directly

paper token
trail drift
#

no im getting it from the .png

paper token
#

ah

trail drift
#

from cdn

paper token
#

text editors would also probably screw up the bytes by changing them to characters it thinks you want

#

depends on the text editor

#

hex editor would probably work

trail drift
#

let me try

#

oh i do uint8 array to base64

trail drift
#

Hmm still couldnt do it

trail drift
#
const res = await fetch(url)
            const imageblob = await res.blob();
            emoteList[emote]['file'] = {imageblob};

when I fetch the cdn .gif api and send it back to the front end its empty

#

this is the res I get from the 7tv response

trail drift
#

nvm i fixxed it
used array buffer instead

trail drift
#

how many emotes does discord api limit?

#

I think if there is a limit, the best bet would be asking the user to create a bot and give me its credentials

rotund pivot
vagrant lion
#

per hour AHHHHHH

paper plover
#

even bots has the same rate limit iirc

trail drift
#

Does that matter if I ask the user to make the bot?

rare magnet
#

does anyone know how i could embed 7tv emotes to a different website/platform

#

i made my own kind of chatroom and would like to have 7tv emotes here

#

is the code for the extension public by any chance i could probably copy alot of it and just adjust

#

ok nvm i found it

trail drift
#

and then call it with the api

real sorrel
rare magnet
#

but im gonna look at code now jukst woke u

rare magnet
#

do the query endpoints work from here?

#

the one using a path works fine with a twitch id

#

but going by a username is a empty jsonb

#

like this works fine

vagrant lion
#

forsenOOOO chatterino 2.5.0

rare magnet
#

but the query one doesnt

#

huh?

vagrant lion
#

pajlading forsenforsenforsenfosernoseforsnofsnoefoesnfrseofsoern

paper plover
rare magnet
#

get my emotes working on my own website

#

so i dont have twitch ids

#

but ill just hardcode my twitch id

#

since idk how else todo it

#

just sucks because if my friends stream here aswell my id is hardcoded

#

could use twitch api but extra effort

paper plover
rare magnet
#

trusting third party api to be up Susge

#

thanks

#

ill use that

paper plover
#

you can then get the 7tv id from the twitch id from:
https://7tv.io/v3/users/twitch/{twitchID} at ['user']['id']

also the current active emote set for twitch at ['user']['connections']["platform" == "TWITCH"]['emote_set']

rare magnet
#

thanks alot got it

bold kettle
#

How do you get the namepaint of a user? I've been trying to figure it out but can't find it in the api docs or anything. I just wanna know how to go from username or user id to getting their chosen namepaint image/gradient etc.

Also badges

paper plover
# bold kettle How do you get the namepaint of a user? I've been trying to figure it out but ca...

for now, you can use GQL requests to fetch those data.
To see how to use them, you can check the gql requests in your browser's Network tab.

For your case, you can use GetUserCosmetics to get the users' owned cosmetics, as well as the current equipped ones ("selected" == true). e.g:

Payload:

{
  "operationName": "GetUserCosmetics",
  "variables": {
    "id": "60ae3cb1b2ecb0150521fa1f"
  },
  "query": "query GetUserCosmetics($id: ObjectID!) {\n  user(id: $id) {\n    id\n    cosmetics {\n      id\n      kind\n      selected\n      __typename\n    }\n    __typename\n  }\n}"
}

Response:

{
    "data": {
        "user": {
            "id": "60ae3cb1b2ecb0150521fa1f",
            "cosmetics": [
                {
                    "id": "62f98190e46eb00e438a6970",
                    "kind": "BADGE",
                    "selected": true,
                    "__typename": "UserCosmetic"
                },
                {
                    "id": "62f97c05e46eb00e438a696a",
                    "kind": "BADGE",
                    "selected": false,
                    "__typename": "UserCosmetic"
                },
                {
                    "id": "61bedf64b6b41ea54419bbb1",
                    "kind": "PAINT",
                    "selected": false,
                    "__typename": "UserCosmetic"
                },
...

This only returns the id of the cosmetics. Use GetCosmetics to get the name, as well as its components (color gradients, background image, etc). e.g:

Payload:

{
  "operationName": "GetCosmestics",
  "variables": {
    "list": [
      "62f98190e46eb00e438a6970",
      "62f97c05e46eb00e438a696a",
      ...
    ]
  },
  "query": "query GetCosmestics($list: [ObjectID!]) {\n  cosmetics(list: $list) {\n    paints {\n      id\n      kind\n      name\n      function\n      color\n      angle\n      shape\n      image_url\n      repeat\n      stops {\n        at\n        color\n        __typename\n      }\n      shadows {\n        x_offset\n        y_offset\n        radius\n        color\n        __typename\n      }\n      __typename\n    }\n    badges {\n      id\n      kind\n      name\n      tooltip\n      tag\n      __typename\n    }\n    __typename\n  }\n}"
}

Response:

{
    "data": {
        "cosmetics": {
            "paints": [
                {
                    "id": "61bede3db6b41ea54419bbb0",
                    "kind": "",
                    "name": "Candy Cane",
                    "function": "LINEAR_GRADIENT",
                    "color": -10197761,
                    "angle": 45,
                    "shape": null,
                    "image_url": null,
                    "repeat": true,
...
sudden gust
quick ibex
#

Idk how it is anymore, but you were able to set the set size to anything below the max limit

sudden gust
quick ibex
#

What you snoopin around my account for HmmNote

sudden gust
#

I'm currently working on transferring the database from the old MongoDB thing to the new sql based model and I discovered those sets because they have a set size below 0.

#

There's only one other user who has sets with this bug

#

So I'm thinking about how to handle this

quick ibex
#

Yea, can still set them negative

sudden gust
#

wtf

#

through the api?

quick ibex
#

Yea

#

Only checks if the size is larger than max size

sudden gust
#

Who wrote this shit OMEGALUL

#

I actually know Aware

#

Just gonna set it to 0

quick ibex
#

When you were first able to have multiple sets it was made so your set size became your acconts "max allowed set size". Later on the api checked if the user had a negative max size and considered that "priveleged", so i was able to set any size then LULE

#

But my > 1000 size sets were reverted Sadge

#

Or were they Hmm

#

I've had lots of fun exploiting parts of the api over the years x0r6ztGiggle

solemn widget
#

oh man

#

how does this guy handle random things like the trending page in a pretty decent way but fuck THIS up

sudden gust
azure cape
#

people abusing it ended up having less emote slots poi_shrug

#

that was before sets were a thing

paper token
topaz crown
#

"query GetCosmestics" misspelled in the api LULE

strange owl
#

there's also "query Annoucement" LULE

lyric violet
#

getAir LULE

vague flame
#

Hey all! I'm trying to write my own app incorporating 7tv emotes, but more than half the time, I'm getting CORS errors when trying to load the image files themselves. E.g.
Access to image at 'https://cdn.7tv.app/emote/60aec2196cfcffe15f4e4f93/2x.webp' from origin '[my site]' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Anybody know how I could resolve, or general thoughts on what to try? Pls ping if so, and thanks in advance! Prayge

trail drift
#

You’d have to do it in the backend

vague flame
#

it's a quick 'n dirty web app that doesn't have a back-end Sadge guess I'll have to decide if I care enough to make one, prob won't
thanks for the confirmation that I wasn't just missing something dumb

trail drift
#

You can just used cdn and put that in an image element src

vague flame
#

how do you mean?

trail drift
#

Hold up let me open my laptop

#

You were trying to get the image file right?

vague flame
#

I just wanna render the image, don't care about downloading the file

#

in case that distinction is relevant

#

but broadly yes

trail drift
#

ok so what framework are you using?

#

I just do

const response = await fetch(`https://7tv.io/v3/emotes/${encodeURIComponent(searchQuery)}`);
#

to fetch the api

#

and then to get the src i do

const data = await response.json();
const emoteUrl =  data.animated ? data.host.url + '/4x.gif' : data.host.url + '/4x.png';
vague flame
#

oh I have the URL already, the first data fetch request goes through fine

#

but like trying to render e.g. https://cdn.7tv.app/emote/60aec2196cfcffe15f4e4f93/2x.webp gives me CORS issues

trail drift
#

use gif

#

look at the emoteUrl const i sent

vague flame
#

the data files only return webp or avi

trail drift
#

no

#

let me show response

#

thats the api res you get too right?

vague flame
#

yes

trail drift
#

ok so

vague flame
#

I was going off the returned file names, I'll try with gif instead of webp/avi

trail drift
#

just try data.host.url + '/4x.gif'

vague flame
#

403 forbidden

trail drift
#

Pffttt send code

vague flame
trail drift
#

try no https

trail drift
#

its a png

vague flame
#

oh I'm dumb lol

#

sorry one sec

trail drift
vague flame
#

yeah yeah that's 100% my bad, brain fried

#

I was testing animated emotes all before this and just copied the wrong link

trail drift
#

good now?

#

also the url takes a little time to load sometimes

#

so I use onLoad={handleLoad} inside my image element

#

which just makes a loading circle thing

#

or maybe you can load the 1x first cause that takes less time

vague flame
#

it does work now! tysm, never would have guessed that on my own

#

really appreciate the help, have a good one

south flare
#

@strange owl is there a setting to disable raider highlight

lyric walrus
#

gif and webp have them enabled

#

nvm it was just cached

#

how did that fix it for that guy then doctorWTF

strange owl
#

I was working on another PR that just uses Twitch’s chat highlight settings, but I wasn’t sure if it was worth submitting.

south flare
#

I see what is the setting called

strange owl
#

Show Raiders (Moderator only) under Highlights > Built-In

#

In retrospect, it might be better for it's default value to be false instead (I just copied the default values for Twitch's chat highlights).

trail drift
lyric walrus
trail drift
#

No because ur not getting the file

#

Ur just simply loading the embed

lyric walrus
#

you are tho

#

the browser still downloads it

#

that would defeat the whole purpose of cors

trail drift
#

I don’t think it downloads it tho

#

It just renders it

lyric walrus
#

it has to download it to render it FeelsDankMan

trail drift
#

shrug that was my guess

#

How would I get the file from that embed then?

lyric walrus
#

wdym by embed

trail drift
#

Like discord gifs

#

It just shows tumblers page

#

Or I’m Dentge

lyric walrus
#

im not sure i follow

#

you mean how does discord render the gifs?

trail drift
#

Hmm I’m wrong

#

The browser does download it

solemn widget
#

Hmm ?

lyric walrus
#

well yea it has to FeelsDankCube

trail drift
#

And the img element bypasses it?

lyric walrus
#

no

solemn widget
#

discord proxies all images through their servers

lyric walrus
#

it should give the missing image icon

solemn widget
#

so they basically download them to their servers

lyric walrus
#

if it can into cors

solemn widget
#

and then give them to you

trail drift
#

I get the image

lyric walrus
#

check your network tab

#

does it say read from cache?

#

and is it a png

trail drift
#

I have to open up my thang

#

Hold up

lyric walrus
#

for whatever reason i didnt get cors on a png with cache disabled FeelsDankMan

trail drift
#

I didn’t do anything with cache

lyric walrus
#

its automatic, you dont manage the cache

#

dev tools has a checkbox to disable cache is what im saying

trail drift
lyric walrus
#

(from disk cache)

trail drift
#

Pffttt it workes

lyric walrus
#

so it never actually made the request

trail drift
#

uhhh

#

its probably because i already requested this before

lyric walrus
#

yea

trail drift
#

where do you see from disk cache

lyric walrus
#

status code

trail drift
#

works

lyric walrus
#

from what domain

trail drift
#

local host

lyric walrus
trail drift
#

is that what a domain is Dentge

#

idfk know these terms

lyric walrus
#

nono im just confused why it worked

#

unless localhost doesnt enforce cors

trail drift
#

didnt work

lyric walrus
#

ok yea makes sense

trail drift
#

well it wont work if i do from console in local too

#

this is from local

lyric walrus
trail drift
#

its the image element doing the magic

lyric walrus
#

do the image tag with cache disabled

trail drift
#

but we just saw it didnt use cache

lyric walrus
trail drift
#

no cahce

lyric walrus
#

oh

#

weird

#

what about the webp versions?

#

it works WHAT

trail drift
#

what if img just bypasses all cors

lyric walrus
#

oh img src GETs are considered simple requests

#

so it doesnt use cors

#

but then what was that guys original issue?

trail drift
lyric walrus
#

was he not doing the same thing? FeelsDankMan

trail drift
#

or

#

no

#

they were tryign to get with avif?

lyric walrus
#

he wasnt using an img tag already?

#

we was fetching?

trail drift
#

i think he was using fetch

lyric walrus
#

oh

#

nvm then

trail drift
#

can you make fetch into simple?

lyric walrus
#

it has to follow some conditions to be considered simple

#

if they dont, then an OPTIONS preflight is sent

trail drift
#

how does 7tv handle it on twitch?

lyric walrus
#

there was some drama a bit ago with this and a different emote provider Clueless

trail drift
#

do they get the image once someone types the emote on twitch

lyric walrus
#

if i were to guess they fetch all the sets enabled for that channel

trail drift
#

wb personal then?

#

thats a bunch of api requests

lyric walrus
#

personal is a little different, but similar idea

trail drift
#

i think it gets the emotes one by one

lyric walrus
#

oh wait i see what you mean now

trail drift
lyric walrus
#

yea idk, maybe they do it on demand then

#

yea seems so

trail drift
#

but the request url isnt .webp

#

its just /2x

lyric walrus
#

oh right there are different resolutions requests FeelsDankMan

#

i was thinking about the emote menu

trail drift
#

for some it uses .avif and others it doesnt

lyric walrus
trail drift
#

and personal has a whole different url

#

wtf

#

i meant the url

lyric walrus
#

thats a twitch emote

trail drift
#

oh

lyric walrus
trail drift
#

Susge none of these use cache tho

trail drift
#

I think im Dentge I put BRANCH="nightly" into .env.dev and i see no difference

trail drift
#

doesnt even show the emotes

#

FeelsBadMan I just want to fix the bug i found

late furnace
#

Sup, sup! Quick question about rate limiting, is there a specific set of requests/time? Before I hit 429? Thx

topaz crown
#

if you're talking about the gql api its in the headers of the response, not sure about the rest api

late furnace
#

It's just between the API and downloading some emotes, I'll just make a request to the users emote set and lookup an emote and then download it, don't know if they got the same rate limit, diferent none...

trail drift
#

Do I run the api and the extension locally to get it to work?

lyric walrus
#

you dont need to run the api yourself, you can point it to the public one in your env file

trail drift
#

do yall know what this is called?

#

the component

solemn widget
#

pretty sure its this

rigid smelt
trail drift
#

which one do yall use?

lyric walrus
#

is there more than one?

#

whatever the official one is

sudden gust
#

our new backend design concept

solemn widget
#

its joever

vagrant lion
#

Wokege new update soon

trail drift
#

Is there rate limit on v1?

south flare
#

v1?

south flare
trail drift
#

like its a low amount?

south flare
#

no like not well built and well limited

#

some routes have limits some dont

#

and its all over the place

#

im not sure what v1 api ur talking abt

trail drift
#

shit i meant v3

#

i thought it was at v1 Dentge

trail drift
#

FeelsBadMan discord api has the best error messages
message: '401: Unauthorized', code: 0

paper plover
#

check your headers and tokens

patent wing
#

whats wrong with that error message

trail drift
#

" General error"

#

my headers are prbbably bad

trail drift
#

the api has 1000 emojis as the limit

#

not 20

trail drift
trail drift
#

that doesnt even rate limit

trail drift
#

mhm mass upload works

trail drift
#

Ok i have two paths now

#

either

#

I make this open source and finish it by added emote set uploads

#

orrrr

#

do that same thing but make one that I host and people can login and shit

patent wing
#

doesnt this already exist, or is this different

trail drift
#

TE_Shrug probably does I think it does everything on discord tho

#

it’s not open source

#

And I’m using a website

patent wing
#

oh neat

strange owl
south flare
#

sure

floral wing
#

Any help would be greatly appreciated

paper plover
floral wing
paper plover
#

Twitch id =/= 7tv id
You can check your 7tv id in the url of your 7tv profile page
e.g. mine is 60ae3cb1b2ecb0150521fa1f and my profile is at https://7tv.app/users/60ae3cb1b2ecb0150521fa1f

you can use the following get request to get the twitch id from twitch name
https://api.ivr.fi/v2/twitch/user?login={username}

you can then get the 7tv id from the twitch id from:
https://7tv.io/v3/users/twitch/{twitchID} at ['user']['id']

#

Also the API doc at https://7tv.io/ is outdated btw, and so far no one is working on updating it since there will be a newer api
Ask here instead for some pointers

floral wing
#

thanks! that solved my issues! I just didn't think there was a subsection based on the platform, so instead of

https://7tv.io/v3/users/twitch/{twitchID} I attempted to call https://7tv.io/v3/users/{twitchID} which obviously didn't work.

Thanks for your help 😄

paper plover
strange owl
trail drift
rancid tulip
#

FeelsStrongMan soon

trail drift
#

why dont yall make it a paid thing for subs only

#

like 7tv to discord

#

missing an opportunity right here

paper plover
#

bc discord has emote upload rate limit and it isnt feasible to server thousands of discord server owners with this service

trail drift
#

nuh uh

#

1000 emotes and it reset every 0.2 seconds

trail drift
paper plover
#

Interesting

paper token
#

7TV could just go full Global Twitch Emotes

#

on browser discord

sudden pine
#

hello does any one know is it possible to integrated 7tv to embed twitch chat ?

trail drift
#

Dentge it’s already inside twitch chat

patent wing
#

It’s not currently possible, the extension wont be getting any new updates just bug fixes. The future rewrite of it would probably support embeds.

jagged vault
#

on the google chrome browser my 7tv extension occasionally stops working and only fixes if I close and reopen the browser (I have fixed my issue after hours of trying to refresh to try to fix it but I thought I would give u guys a heads up on that issue)

sudden pine
patent wing
paper plover
#

most of the thing in the doc is not working nor outdated

strange owl
#

@south flare could you take a look at my prs whenever you have time peepoUnpls

pulsar iris
#

Hasn't uploaded in 2 days

rotund pivot
#

the bot is disabled

paper token
#

Hello Moderator but for this channel instead

atomic belfry
#

Just wanted to post that the ONLY reason I still have FFZ installed is because of its audio compressor, which makes every stream way better to watch. I'd love if 7tv added something similar so I can just have this one extension to rule them all 👌

rotund pivot
#

YEAHBUTFFZ next extension

vagrant lion
#

angrEBB release the beta version already

rotund pivot
#

it doesnt exist

paper token
#

System-wide compression is so much nicer

#

than an extension that ONLY works on twitch streams

atomic belfry
#

That may be true, but for work reasons, I view things as they are produce on my PC. The only exception is twitch

plush sandal
#

shits $100/year

paper token
plush sandal
#

Oh yeah forgot you can have an account and no membership

#

Not renewing it until I get a macbook

pearl ore
#

omeScrajj

#

peepoTalk "Connection Closed: 1005"

#

Why does it just close connection with no reason?

solemn widget
#

1005 seems like a cloudflare error

pearl ore
#

It's the WebSocket code tho, no? Hmm

solemn widget
#

Eh nevermind it sounds unlikely

pearl ore
#

I mean, it's believable since during development I accidentally hammered the WS server with lots of reconnects

#

Like a lot a lot

#

Sorry peepoShi

pulsar iris
topaz crown
#

probably wasn't noticable with the average traffic eventapi sees

pearl ore
#

omeScrajj

#

It's working fine and then suddenly server just disconnects with 1005 (which means no reason given in WebSockets)

#

Working fine for like half a second

#

It's probably a problem on my side, but still, am confused

topaz crown
#

ive never seen 1005 from eventapi, only 1006 when its down and 1001 from cloudflare

#

weird

pearl ore
#

Found the problem. In short: JS type coercion did me dirty again

trail drift
#

Use typescript then

stuck oasis
south flare
#

True

trail drift
#

I love when I put any to solve any type problems

#

Instead of making an interface Sleeper

topaz crown
quick ibex
vagrant lion
strange owl
#

lookin good Okay

rotund pivot
#

nymnMhm nice

#

would be cool to have this feature on the ffz addon as well

quick ibex
#

main problem is that the current implementation (that has been in the extension for more than a year now) uses 3rd party cookies which are being deprecated

warm yacht
#

showing when emotes are added, removed, or renamed?

rotund pivot
#

no the preview for emotes and a button to add them from chat

warm yacht
#

there is a preview for emotes already when you add / remove / rename them

#

as in, it posts the emote itself in chat with the name in brackets

rotund pivot
#

i meant this part

warm yacht
#

as for adding it from chat, I wouldn't even know how to best implement that with the whole CORS and API stuff

south flare
#

I suppose what would need to be done is request the emote via the api and then if the emote is publicly listed show it

#

Or blur it or tmsg if it's not

warm yacht
#

Well requesting the emote isn't the problem

#

I assume at least

#

Moreso the part of adding it from chat through a button / embed on the emote 😄

#

Since I do like the idea of that, that a user can just post a link to an emote and one of the mods / editors (or the streamer) can just add it from within chat, instead of navigating to the 7TV page and adding it there

paper plover
#

this would be huge

warm yacht
#

would it though?

#

Opening the emote in a new tab and adding it there isn't that many more steps

paper plover
warm yacht
#

Mhm that part I can get behind, yeah

#

But again, authorization wise I'm really not sure how to best implement that

paper plover
#

and for streamers, most of them would have to drag the tab outside of the stream view in case it's a horse cock or anything tos

#

is it possible to just show embed for the streamer and their editors?

warm yacht
#

Well the thing is, you need to somehow authorize a call over to 7TV's API to add the emote

#

And you don't have a token or authorization code available on Twitch

paper plover
#

ic

#

I have never considered that the extension itself never required user auth until you mentioned it just now

solemn widget
#

7tv oauths soon

paper plover
#

Lemme confirm again
The login button in the extension settings popup is purely cosmetic right?

warm yacht
#

I can't say anything about the 7TV extension unfortunately

paper plover
#

One thing tho
For logging into 7tv.app via Kick
The extension is able to set the auth in the local storage of 7tv.app or 7tv.io, so it might also probably able to get the auth value?
Maybe something like a cross-domain local storage can help you get the info in the local storage from 7tv.app, check if the 7tv id matches with the channel, the gets the auth and do the add emote request?

warm yacht
#

That'd require an update to the FrankerFaceZ extension on Chrome and Firefox to add 7tv.app and 7tv.io to the authorized domains list

rotund pivot
#

YEAHBUTFFZ all platforms could benefit from this

#

not just 7tv

earnest sedge
quick ibex
#

However if you log out and back in you set a cookie on 7tv.io which is in included as a 3rd party cookie when making requests to the api, so it works

#

Google is removing 3rd party cookies soon tho

#

Can maybe reimplement how it was before it was changed

#

Or maybe we can set partition key on the 7tv.io cookie so it can be used from when doing requests from twitch?

#

Dunno much about cookies tho

#

Old implementation was basically for the extension to ask for permission to access 7tv.app. then grab the token from there

quick ibex
frosty bronze
#

idk if its me or theres some experiment preventing 7tv nightly from working correctly

frosty bronze
#

yea 7tv is unusable for me at the moment, switching back to ffz

#

ok nvm even ffz broken

#

stupid experiment

south flare
#

yeah

quick ibex
vagrant lion
solemn widget
#

thats pog

warm yacht
#

pretty neat

stuck oasis
#

faster than the actual website LULE

trail drift
stuck oasis
pearl ore
#

Classic

#

So excited for my 2 Months badge weestHapps

gleaming kayak
#

does anyone know hot to convert the colors from GetCosmetics to hex colors? so something like -1310760961?

#

and what kind of colors are they?

solemn widget
#

its an encoded way to have colors

#

as a single integer

#

color = -757935361

r = (color >> 24) & 0xff
g = (color >> 16) & 0xff
b = (color >> 8) & 0xff
a = (color >> 0) & 0xff
print(r, g, b, a)
210 210 210 255

#

you basically need to shift some bits around

#

to get back all the values

gleaming kayak
#

ahh i see

#

thanks

paper token
#

I was trying to look it up

solemn widget
#

bitshifting

paper token
solemn widget
#

i have no idea

#

i think you can just do something like

#
0xFF0000FF
paper token
#

surely there's a reason for it

#

instead of just using hex

patent wing
#
const DecimalToStringRGBA = (num: number): string => {
  const r = (num >>> 24) & 0xff;
  const g = (num >>> 16) & 0xff;
  const b = (num >>> 8) & 0xff;
  const a = num & 0xff;

  return `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(3)})`;
};

i use this for my chat overlay

solemn widget
#

im pretty sure you took this from the source code of the extension Kapp

patent wing
#

probably, been a while dont remember

solemn widget
patent wing
solemn widget
#

i dont know how legal taking code from a non open source thing is

#

actually

#

as long as you're not selling it i guess you should be fine

patent wing
#

its Apache 2.0 with common clause

#

ye

#

Tomfoolery selling a chat overlay lol

#

actually would be able to sell it since commons clause says "a product or service whose value derives, entirely or substantially, from the functionality of the Software"

#

don't think a bitshifting function counts as "substantially"

solemn widget
#

yeah i doubt it

patent wing
#

just noticed the licensor

#

anatole coming to sue me

#

curious on the legal standing of that business

gleaming kayak
#

can I somehow check whether a user is a 7tv sub?

patent wing
#

I think a user would have the subscriber role, which I think is a specific number in the users roles array

gleaming kayak
#

okay i'll look

patent wing
#

its a uuid, should look something like this. not sure what the subscriber uuid is tho

gleaming kayak
#

yea i see

#

thanks

vagrant lion
#

easiest way is to check for their sub role on 7tv.app i guess

patent wing
vagrant lion
#

mhm 01 at the end

patent wing
#

ApuShrug i mean its a bitshifting function, not much you can change

paper token
#

DecimalToStringRGBA

#

At least I have a name

warm yacht
#

Honestly I doubt this would be ... copyrightable, it's way too generic

solemn widget
#

yeah

#

that too

paper token
#

this subpixel smoothing looks really contrasty

#

like mostly primary colors

#

it seems to work well though

thick coral
tribal vapor
#

@south flare

tribal vapor
thick coral
#

..?

manic torrent
#

Need elp with laptop what should I get to program

plush sandal
#

something with at least 16gb of ram

manic torrent
#

so an air m2 wont work?

#

Since it has 8

patent wing
#

youre asking the wrong questions

#

there are people who code on their phone

paper token
patent wing
paper plover
#

Simple coding for learning? Most laptop can do

worn pasture
#

hello guys, im having some issues with hidding the recommended channels on twitch, and since for some reason i cant post in the bugs-and-issues channel im gonna share it here

#

so, when i expand the left sidebar the recommended channels are hidden

#

but if I collapse it they are not anymore

#

is there a way to fix this?

#

i always use twitch having the left side bar collapsed

#

this are my settings in the 7tv extension

manic torrent
#

I’m gonna buy a MacBook Air

quick spear
#

are you buying the macbook air or is the macbook air buying you

pulsar iris
paper token
quick spear
pulsar iris
#

Companies after forking Linux and playwalling it with a tos that goes against the spirit of foss

pulsar iris
#

I wasn't going to

manic torrent
paper token
#

Ive gotten refurb stuff a few times

#

Looks identical to brand new stuff

pulsar iris
#

Cheaper

#

The preformance boost from M2 to m4 isn't that much and won't really be noticeable for your tasks

trail drift
#

Look at Best Buy refurbished

#

I got a 1200 laptop for 400

#

And my friend got 1400 for 600

thick coral
#

Yo, timestamps stoped working..?

#

Anyone else..?

thick coral
#

Wonder if it's 'cuz of padding/or alt lines

alpine echo
#

how does 7tv get the recent chat history from before you joined?

alpine echo
#

are you sure? i just tried getting a chats history using that after loading the channels page in my browser and seeing 7tv load the chat history, but it said that its bot had not joined that channel

strange owl
alpine echo
#

when i open a chat or reload i see previous messages like this

#

im trying to figure out where 7tv pulls this data from

strange owl
#

that data is provided by twitch, natively it also has this behavior

alpine echo
#

oh it only does it when signed in why

#

i opened an inprivate window to make sure it wasnt twitch doing it but i wasnt signed in

strange owl
#

yes that is correct

plush kayak
#

yea that's just twitch although u can only query their gql api if you logged in with twitch's client id

#

when u make the request you need to provide an auth token and a client id

#

but the auth token is only valid if it came from the client id

#

and only twitch's is whitelisted

topaz crown
plush kayak
#

yeah but for chat history u do

topaz crown
#

oh ur right my b

plush kayak
#

yea

#

there wouldn't be a 3rd party service if it wasn't for that

sudden gust
#

For everyone who is interested what we've been up to: #dev-news

warm yacht
#

that WIP site looks clean chefskiss

abstract elk
#

Redesigned search

short sand
#

New redesign ChefKiss

Please focus on immediately improving search TE_Prayge

rotund pivot
solemn widget
patent wing
paper token
#

I actually made a 7TV logo with sharp 120° angles like that

#

I’ll have to find it to compare

rancid tulip
#

7

pallid knot
#

Fix your Twitch extension doesn't open up fully just a thin line and clears the chat ever 1 to 2 messages

stuck oasis
#

4HEad devs just fix it

pulsar iris
pallid knot
thick coral
#

Not Doc, apperantly..?
Vring vack: "YEAHVUT7TV", don't vall ov Thy wall, Humpty

paper plover
paper plover
#

solved with zooming to 90%

south flare
#

this is the design that won for the new entitlement system

paper token
plush kayak
south flare
#

ill fix the i and a swap

rancid tulip
#

FeelsStrongMan it's happening

split marsh
#

I'm guessing there's some work going on with events.7tv.io/v3 ? KekW my bot is freaking out at me complaining that it can't query it so has backed off and is now waiting a long time before reconnects

topaz crown
#

eventapi doesn't seem to be working on chatterino

#

worked on browser tho so idk

south flare
#

Hmm okay I’ll look when I get home

sudden gust
#

Hetzner took us down

south flare
#

hetzner blackhole'd our ips because we had too many open connections

topaz crown
plush kayak
#

so what happens now

split marsh
south flare
#

i fixed it

split marsh
#

Yeah I saw 🙂 appreciate it

rotund pivot
#

self ddos ayyybuPog

paper token
#

I wish discord had a way to “slow ping” people

#

For when you @ everyone in large servers

#

It would ping people over a user-specified period

#

Instead of all at once

short sand
#

All due respect, shouldn't it be on developers to make sure this doesn't happen?

#

As to how, I have no idea. I'm a simple Pepeg I only know the worse "scale"

south flare
#

i think its actually how many requests we do to stripe

#

its not even OUR API thats lagging

#

its stripes limit

#

and thus it becomes us

short sand
#

Oh really? I didn't even know it hit stripe's API

#

I just typed in the code and it said success - already subbed btw

south flare
#

we have to create the subs somehow

short sand
south cairn
#

r u supposed to get the sub badge for the 3 day trail or just the paint

rotund pivot
#

ayyybuBuhh did you see any sub badges

south cairn
#

well

#

i had sub already so yeah kek

#

but my friend did not

rotund pivot
#

It’s just a regular subscription

#

You you get 5 monthly paint and the badge if you’re eligible

rancid tulip
#

7tv Update around the corner :FeelsStrongMan

plush kayak
#

:

tribal vapor
#

:

solemn widget
#

:

sullen edge
#

@quick ibex why does putting country code in the box here produce different results from using groups? the group only has 2 emotes for some reason Hmm

quick ibex
sullen edge
#

ahh okay

#

I don't mind just using the code, was just curious, is there any other benefit to it?

#

(in my case it's one flag, one language)

quick ibex
#

no

sullen edge
quick ibex
#

The query should be slightly more performant i guess

paper token
#

This is the first time I've actually seen the country selector

quick ibex
#

Yea, made it not long ago

paper token
#

Although I mean like, the separate queues per-country has been a thing for a while too, right? It's my first time seeing anything related to that

quick ibex
#

nope

paper token
#

I thought they were

quick ibex
#

api has had the ability to query by country, but not the website

paper token
#

ah

brisk cove
#

Who pinged me

twilit jolt
#

Quick question does anyone think the current 7tv website is clunky

patent wing
#

not clunky mostly backend issues

frosty bronze
#

but the front end will also get a facelift too

obsidian moon
vagrant lion
#

u can bookmark those 2 links with your username Shrugeg then edit the url to others in the future

obsidian moon
#

its not about me, its about others, im sure others like me whenever they come to channels like these check pinned messages for important changes/announcements, i believe it would be helpful.. so many good things get buried by the tens of thousands of messages

#

also, question about the API, is there a way to get the zero-width attribute of an emote?

#

and if someone can explain what the flags attribute is 🙂

paper plover
paper plover
obsidian moon
#

ah, thank you! documentation is a bit tricky to be found but i was on the right path by pure coincidence 😅

paper plover
#

if you are not familiar with bit-wise calculation

PRIVATE = 1,
LISTED = 2,
ZERO_WIDTH = 256,
PERSONAL_USE = 512
PERSONAL_USE_REJECTED = 1024,

but i think LISTED, PERSONAL_USE and PERSONAL_USE_REJECTED is not used
those can be checked from the "state" value

obsidian moon
#

you can just paste it in the console to see the result peepoNerdGiggle

plush kayak
#

but if it's private and zero width isn't the flag value different

#

so u can't check for an exact value

stuck oasis
#

bitmask the flag you want and check if its 0

#
int flag = 0b100000001; // = 257

int is_private = (flag & (1 << 0)) != 0;
int is_zw = (flag & (1 << 8)) != 0;
#

something like that

#

depends on the language

#

if thats what you mean

cursive oasis
#

the emote query of the v3 api is not working for me Donki

#

maybe im just stupid idk

#

oh its a

#

gql thing

plush kayak
untold iris
#

Is there anywhere I can find a full schema doc for the v3 api or do I just gotta figure it out myself lol

patent wing
stuck oasis
untold iris
plush kayak
#

Anatole

frosty bronze
bold kettle
#

why the fuck does the 7tv api show the NNYS 2023 set 3 times for me (I do own it) but 2 times for another account that doesn't even own the set? YEK And then no times for other accounts? So weird. And someone else in general said they do own it and it shows up twice.

So how am I supposed to programatically determine who owns this set if the number of times it appears isn't even consistent?

#

I used the /users/twitch/<user-id> endpoint for this btw

keen portal
#

is it permanent or for a while?

gaunt crane
#

only for a while

stuck oasis
# bold kettle why the fuck does the 7tv api show the NNYS 2023 set 3 times for me (I do own it...

if you use gql you can request users by connection as well and for emote sets enable entitled and it should work, so something like

query MyQuery {
  userByConnection(id: "135078647", platform: TWITCH) {
    emote_sets(entitled: true) {
      id
      name
    }
  }
}

returns this for my account

{
  "data": {
    "userByConnection": {
      "emote_sets": [
        {
          "id": "6116bc79446a415801b1b70d",
          "name": "水の鳥's Emotes"
        },
        {
          "id": "6320c315b5b851e2f4c1e37e",
          "name": "ente"
        },
        {
          "id": "632e05f02cfbb9c4a99577f4",
          "name": "forsen"
        },
        {
          "id": "63a9e26be98a476bfba07026",
          "name": "Personal Emotes"
        },
        {
          "id": "64a9ebba4d31004fca147dc9",
          "name": "marin"
        },
        {
          "id": "65195df03dc6f84f99aa2cad",
          "name": "test link"
        },
        {
          "id": "6664dbad6baf48349280a13b",
          "name": "ente"
        },
        {
          "id": "6664dce55e2229f4f6ebed1c",
          "name": "forsen"
        },
        {
          "id": "64f610be8bef73096908e237",
          "name": "Fantasy | 7TV Sub Event 2023"
        },
        {
          "id": "65786294a80ced4d1d9f55ff",
          "name": "NNYS 2023"
        }
      ]
    }
  }
}

it shouldnt show up if someone doesnt have it

paper plover
#

forsen

bold kettle
stuck oasis
#

wdym differentiate

#

liek what exactly are you trying to do Hmm

bold kettle
#

I'm coding a chat overlay and when a user speaks in the channel I'm loading their personal emotes to be used in the overlay, so I need just the personal emote sets they have not the channel emote sets

#

But I could just call without entitled and then with entitled and filter out the ones that return without entitled. Just seems a bit silly xdd

stuck oasis
#

you can request the emote sets flags

#

so if you send gql query MyQuery { userByConnection(id: "135078647", platform: TWITCH) { emote_sets(entitled: true) { flags name id } } } you get ```
{
"data": {
"userByConnection": {
"emote_sets": [
{
"flags": 0,
"name": "水の鳥's Emotes",
"id": "6116bc79446a415801b1b70d"
},
{
"flags": 0,
"name": "ente",
"id": "6320c315b5b851e2f4c1e37e"
},
{
"flags": 0,
"name": "forsen",
"id": "632e05f02cfbb9c4a99577f4"
},
{
"flags": 4,
"name": "Personal Emotes",
"id": "63a9e26be98a476bfba07026"
},
{
"flags": 0,
"name": "marin",
"id": "64a9ebba4d31004fca147dc9"
},
{
"flags": 0,
"name": "test link",
"id": "65195df03dc6f84f99aa2cad"
},
{
"flags": 0,
"name": "ente",
"id": "6664dbad6baf48349280a13b"
},
{
"flags": 0,
"name": "forsen",
"id": "6664dce55e2229f4f6ebed1c"
},
{
"flags": 4,
"name": "Fantasy | 7TV Sub Event 2023",
"id": "64f610be8bef73096908e237"
},
{
"flags": 4,
"name": "NNYS 2023",
"id": "65786294a80ced4d1d9f55ff"
}
]
}
}
}

bold kettle
#

Oh personal have 4 PepoG

stuck oasis
bold kettle
#

thank you PeepoLove

stuck oasis
#

np

#

also consider checking if the third bit is set instead of just checking if the flags field equals 4 since there might also be other flags set in some rare cases (I think? Thats how it works for emote flags at least)

#

Hmm not too sure tho if that can happen on emote set flags too

#

it should be very rare cases anyway

bold kettle
#

not sure what you mean by that

stuck oasis
#

well so there are other flags besides just personal like immutable or commercial that have different values. the Commertial flag is 8 or the immutable flag is 1

#

so if a set is immutable and private

#

it might return 5

#

in the fflags

#

because 4 + 1

#

but im not sure if that can happen on emote sets

#

these are the flags

#

there arent that many

bold kettle
stuck oasis
#

Actually now that i think about it you might also want to check for the commercial flag which is 8 think idk if there are any sets like that already but i think that flag would imply something similar to personal emotes except you purchased the set

bold kettle
#

Anyone know who the Dungeon Mistress is? xdd

paper token
#

Me

pulsar iris
#

Kathy

vagrant lion
#

me

solemn citrus
#

yoo

fickle mica
fierce idol
bold kettle
#

So I noticed that on Chatterino7 all animated emotes seem to run on a global clock so that they are always synced with their start times. But I notice the 7tv browser extension does not do anything like this so emotes are not in sync with each other. Is this just not possible with how browsers work? Was looking to implement it in a chat overlay I'm making but it's way too advanced for me.

The only thing I could come up with is set the img src to empty and back to the image for all currently shown img elements whenever a new one appears. It works but it's laggy with a lot of images and causes all emotes to start over when a new emote appears in chat.

Any help would be appreciated peepoLove

patent wing
#

browser abstraction

solemn widget
#

firefox emotes start their animation each time they spawn i think

#

but chromium might do something else

bold kettle
solemn widget
bold kettle
solemn widget
#

there's somewhat of a possibility that you would be able to load the images within a <canvas> and then play them manually but other than that, i'm really not sure how else you could do it

#

we couldn't solve this with the 7tv extension as its a browser thing

bold kettle
#

PepoG okay thank you I'll look into canvases

south flare
#

why do u care so much abt sync think

lethal jackal
#

uhm ....?

#

brave browser

#

plus the server gives me 4 random numbers after my nickname every time I click refresh

lethal jackal
vagrant lion
#

never seen this before

lethal jackal
#

I test different browsers, firefox, same thing

#

i am unlink my clollection from yt and kick

rotund pivot
#

its gonna always happen if your first connection isnt twitch

vagrant lion
#

kick connection should be fine

lethal jackal
#

I have another question about the founder's badge. I couldn't unlock it, I don't know why?

topaz crown
#

You only get it if you subbed the first month or so of 7tv

vagrant lion
#

found this forsenLevel

lethal jackal
#

thanks and have good weekend

bold kettle
bold kettle
#

I know it would be a breaking change for implementations but I think it'd make more sense to define paint drop-shadows using em instead of px so that it's not font-size dependent. Right now if you use px for the drop shadow and have a 48px font-size it's 1/3rd the size it should be according to the font-size used on the 7tv website for usernames being 16px.

bold kettle
#

Does someone happen to have the relevant code snippet for the 7tv extension that gets a random color for a user that doesn't have an assigned color? Just wanna see if it's pure random or a function I can copy so that I can sync the random color with my chat overlay

solemn widget
#

if you mean grayname coloring then its client side

#

on twitch it just picks one of the colors from the default twitch colors

bold kettle
#

o

#

welp, okay thank you

solemn widget
#

so its one of these

#

oh oops

#

i randomly found the values

#

for all the colors

#

in the chatterino repo

bold kettle
#

Gotcha

topaz crown
#
  '#0000FF': 'blue',
  '#8A2BE2': 'blue_violet',
  '#5F9EA0': 'cadet_blue',
  '#D2691E': 'chocolate',
  '#FF7F50': 'coral',
  '#1E90FF': 'dodger_blue',
  '#B22222': 'firebrick',
  '#DAA520': 'golden_rod',
  '#008000': 'green',
  '#FF69B4': 'hot_pink',
  '#FF4500': 'orange_red',
  '#FF0000': 'red',
  '#2E8B57': 'sea_green',
  '#00FF7F': 'spring_green',
  '#9ACD32': 'yellow_green'
};``` in case you want the hex ones
bold kettle
#

I already have those and was picking a random one from them but didn't know if there was a way to sync it, but seems not so oh well

patent wing
#

decimal color

const TWITCH_COLORS: &'static [u32] = &[
    16711680, // Red
    255,      // Blue,
    65280,    // Green
    11346466, // Fire Brick
    16744272, // Coral
    10145074, // Yellow Green
    16729344, // Orange Red
    3050327,  // Sea Green
    14329120, // Goldenrod
    13789470, // Chocolate
    6266528,  // Cadet Blue
    2003199,  // Dodger Blue
    16738740, // Hot Pink
    9055202,  // Blue Violet
    65407,    // Spring Green
];
paper token
#

I remember a channel that would ban you if you used spring green and didn’t change it after being warned

patent wing
paper token
#

It wasn’t based though

#

It was literally “it hurts my eyes”

broken ermine
#

Hi,
I wanna to track personal user emotes on multiple twitch channels. If I subscribe via WS on the channel events on the multiple channels, how can I track the result, from which channel the event came?

topaz crown
broken ermine
#

And my event

topaz crown
#

of the channel

topaz crown
#

have you tried adding or removing emotes, are you getting dispatches for those

broken ermine
#
cond = {
        'ctx': "channel",
        'platform': "TWITCH",
        'id': str(channel_id),
    }
...

{
    "op": 35,
    "d": {
        "type": "emote_set.*",
        "condition": cond}
topaz crown
#

i use the cond = { "object_id": "emote set id" } for the condition on emote_set.update, i haven't tried using channel context

open mason
#

Hi, I'm trying to create a extension from scratch to add badges from our community to next to twitch chat-user, but cannot access to the proper target to create a mutationObserver, can you give me hint???

plush kayak
#

the extension is open source

patent wing
#

source available

bold kettle
#

Does anyone know why on Chatterino7 when a user that has 7tv cosmetics chats from a different client that doesn't use 7tv cosmetics, their cosmetics just don't load at all for me? Why does their client affect what my client loads?

solemn widget
#

if you dont send your presence to the server the server doesnt know that you're in chat

#

so it doesnt distribute your cosmetics to everyone else

#

it's basically the best solution we can come up with that doesnt involve putting a bot to listen to every chat ever

vagrant lion
#

who thought of this? Madeg

bold kettle
#

I would just make the client store a list of seen chatters and if they haven't been seen chatting for x minutes then stop checking for their cosmetics

solemn widget
#

yes

#

this solution has a very bad problem though

#

if you're in a chat with like 200K people they would have to query all the chatters in chat and ask the 7tv servers for whether or not they have cosmetics

plush kayak
#

is it not possible to just send extra irc data

solemn widget
#

so this means that if 1 person chats, 200k other people will have to ask the server, and that'll happen with every message

plush kayak
#

or does twitch remove any invalid ones when it goes from server to all clients

bold kettle
#

I see

solemn widget
plush kayak
#

yea ok

solemn widget
#

i dont remember the exact reason for them not doing it but it's mostly because twitch staff asked not to do it

plush kayak
#

well it's also just

#

if there's any other thing

#

that uses that hack

#

to send more data

#

it will be incompatible

solemn widget
#

yeah that approach also limits it to twitch only

#

you wouldn't be able to add cosmetics to like kick with this type of system

#

or youtube

plush kayak
#

no I mean like

#

sending more irc data would mean that u add a nonce tag and then the value would be encrypted data correct?

bold kettle
#

I guess the only other way to mitigate it would be to create a cached 7tv cosmetics data per channel so every client would check and update from that one source for what channel they are in and that one source would be the thing that updates based on people chatting instead of the thousands of clients.

plush kayak
#

not encrypted

#

I meant encoded

#

whatever

solemn widget
#

it would be incompatible but pretty much no one does anything with client-nonce's, they're made so you can check that your message actually got sent into chat or whatever

plush kayak
#

but if u do that and there's another extension that does the same thing it won't merge the tags correct?

solemn widget
#

it's only used by the twitch web chat

plush kayak
#

if 7tv does it other people will Clueless

solemn widget
#

that would probably mean they would have to make way anyway

bold kettle
solemn widget
bold kettle
solemn widget
#

actually

#

i think that's how badges worked originally in older 7tv versions

#

you just had a huge json file with user ids and badge ids

bold kettle
#

Well I'm assuming that was global though not per channel right? Which I could see being very bad very quickly

solemn widget
#

yeah it was global

plush kayak
#

doesn't bttv do that LULE

solemn widget
#

yes

bold kettle
#

yes

#

and chatterino

paper token
#

and ffz too

#

iirc

solemn widget
#

the thing with our cosmetics is that we want appealing real-time cosmetic updates

paper token
#

yeah

bold kettle
#

yeah

paper token
#

that's the reason that 7tv moved away from that method

#

because the update times were too long

bold kettle
#

But yeah that's why I said storing it per channel for active chatters so that it would still be manageable size

solemn widget
#

i think the laziest solution to this problem would be to have a mix of our current thing with cached cosmetics but storing all the people who chatted in a specific chat and publically displaying them would probably be a privacy issue

#

so idk

bold kettle
#

I mean I guess? But if you just store people that were active the last 10m it's really not much and you could literally just see that by being in the chat yourself

solemn widget
#

yeah but wouldn't you just end up with the same problem then

bold kettle
#

no because the instant they chat again their cosmetics are checked for again

solemn widget
#

if they send presence to the server

bold kettle
#

I think we're thinking about this differently

solemn widget
#

maybe

bold kettle
#

The thing I am thinking of doesn't include presense at all. It just checks the cosmetics for anyone actively chatting in the channel and stores that info for all clients to see in that channel.

So basically:

  1. person chats in chat
  2. server that checks for people chatting in that channel checks for that new person's cosmetics and stores it in a cache for the channel (and adds them to a list to check for updates periodically)
  3. The other people using a 7tv client just periodically check the channel cache for users with cosmetics to display them
  4. that person hasn't been seen in 10m so their cache is removed.
solemn widget
#

yes so basically your solution involves having a bot in the channel right

#

which would watch people in the chat

bold kettle
#

I guess yeah but could just be an anon bot like justinfan

solemn widget
#

twitch might get rid off anon connections soon

#

they've been experimenting with that

pulsar iris
#

7tv tried having a bot and everyone lost their minds

bold kettle
#

but they had a named non-anon bot

vagrant lion
#

tf ban 7tvbot

bold kettle
solemn widget
#

anon or not it could still be a pretty iffy issue

misty olive
vagrant lion
solemn widget
#

even if the bot would be open source you cant make sure the server runs the exact same build, it's an interesting privacy issue

pulsar iris
#

Yes but it was also many chatters in here

misty olive
vagrant lion
#

StrongMan night VS analtoe

pulsar iris
#

Classic assic

misty olive
#

KKonaS i don’t want my data stolen!!!

bold kettle
solemn widget
#

yes

#

but it's a server issue

#

if you compile chatterino from scratch you can be sure there isn't any spyware in it

bold kettle
#

true

solemn widget
#

you cant check if the server is running any kind of tracking on it

#

because you dont have access to it

bold kettle
#

Just give everyone access to the server 4HEad

paper token
#

I think 7tv is widespread enough that people would be ok with having the bot in their chat, BUT a different solution would be ideal

bold kettle
#

Well non-anon bots are definitely limited by Twitch now if not modded

#

don't remember the number of channels they can be in but it's not much

vagrant lion
#

what if u selfbot? tf for example, troy selfbot himself instead of 7tvbot

paper token
#

decentralized self-botting 5Head

vagrant lion
#

surely people wont ban him for stalking right? ClueMan

paper token
#

everyone snitches reports on the other uses in chats

solemn widget
#

funny thing but breaks the twitch tos

paper token
#

7tv extension checks other chatters and sends the data to 7tv to check for badges and cache it for that channel

#

would be cool tho

bold kettle
paper token
#

the embed preview text is funny

bold kettle
#

oh true xdd

#

That's cause for some reason the link I got from google was for page 2

paper token
#

ah

next tundra
rare crag
#

sorry for asking this here, im having a problem with the 7tv, who can i talk to try and fix it?

frosty bronze
#

usually helps if you describe the problem

vagrant lion
#

forsenClassic ask to ask

lyric cosmos
#

Yo wsg brotha

topaz crown
#

hi

#

so basically you can just replicate the website's gql requests