Remove channel points handling

This commit is contained in:
DevilXD committed 2025-05-01 17:06:18 +02:00
1 parent 9fbbbee5ef
commit 240ba23b0c
23 files changed
+23 -232

No files matched your search

-21
View File
@@ -133,7 +133,6 @@ class Channel:
self.id: int = int(id) self.id: int = int(id)
self._login: str = login self._login: str = login
self._display_name: str | None = display_name self._display_name: str | None = display_name
self.points: int | None = None
self._stream: Stream | None = None self._stream: Stream | None = None
self._pending_stream_up: asyncio.Task[Any] | None = None self._pending_stream_up: asyncio.Task[Any] | None = None
# ACL-based channels are: # ACL-based channels are:
@@ -355,26 +354,6 @@ class Channel:
if needs_display: if needs_display:
self.display() self.display()
async def claim_bonus(self):
"""
This claims bonus points if they're available, and fills out the 'points' attribute.
"""
response: JsonType = await self._twitch.gql_request(
GQL_OPERATIONS["ChannelPointsContext"].with_variables({"channelLogin": self._login})
)
channel_data: JsonType = response["data"]["community"]["channel"]
self.points = channel_data["self"]["communityPoints"]["balance"]
claim_available: JsonType = (
channel_data["self"]["communityPoints"]["availableClaim"]
)
if claim_available:
await self._twitch.claim_points(channel_data["id"], claim_available["id"])
logger.info("Claimed bonus points")
else:
# calling 'claim_points' is going to refresh the display via the websocket payload,
# so if we're not calling it, we need to do it ourselves
self.display()
async def send_watch(self) -> bool: async def send_watch(self) -> bool:
""" """
This performs a HEAD request on the stream's current playlist, This performs a HEAD request on the stream's current playlist,
+1 -1
View File
@@ -113,7 +113,7 @@ URLType = NewType("URLType", str)
TopicProcess: TypeAlias = "abc.Callable[[int, JsonType], Any]" TopicProcess: TypeAlias = "abc.Callable[[int, JsonType], Any]"
# Values # Values
MAX_INT = sys.maxsize MAX_INT = sys.maxsize
BASE_TOPICS = 3 BASE_TOPICS = 2
MAX_WEBSOCKETS = 8 MAX_WEBSOCKETS = 8
WS_TOPICS_LIMIT = 50 WS_TOPICS_LIMIT = 50
TOPICS_PER_CHANNEL = 2 TOPICS_PER_CHANNEL = 2
+2 -27
View File
@@ -820,7 +820,6 @@ class ConsoleOutput:
class _Buttons(TypedDict): class _Buttons(TypedDict):
frame: ttk.Frame frame: ttk.Frame
switch: ttk.Button switch: ttk.Button
load_points: ttk.Button
class ChannelList: class ChannelList:
@@ -841,13 +840,9 @@ class ChannelList:
state="disabled", state="disabled",
command=manager._twitch.state_change(State.CHANNEL_SWITCH), command=manager._twitch.state_change(State.CHANNEL_SWITCH),
), ),
"load_points": ttk.Button(
buttons_frame, text=_("gui", "channels", "load_points"), command=self._load_points
),
} }
buttons_frame.grid(column=0, row=0, columnspan=2) buttons_frame.grid(column=0, row=0, columnspan=2)
self._buttons["switch"].grid(column=0, row=0) self._buttons["switch"].grid(column=0, row=0)
self._buttons["load_points"].grid(column=1, row=0)
scroll = ttk.Scrollbar(frame, orient="vertical") scroll = ttk.Scrollbar(frame, orient="vertical")
self._table = table = ttk.Treeview( self._table = table = ttk.Treeview(
frame, frame,
@@ -880,9 +875,6 @@ class ChannelList:
self._add_column( self._add_column(
"viewers", _("gui", "channels", "headings", "viewers"), width_template="1234567" "viewers", _("gui", "channels", "headings", "viewers"), width_template="1234567"
) )
self._add_column(
"points", _("gui", "channels", "headings", "points"), width_template="1234567"
)
self._add_column("acl_base", "📋", width_template="✔") self._add_column("acl_base", "📋", width_template="✔")
self._channel_map: dict[str, Channel] = {} self._channel_map: dict[str, Channel] = {}
@@ -937,11 +929,6 @@ class ChannelList:
else: else:
self._buttons["switch"].config(state="disabled") self._buttons["switch"].config(state="disabled")
def _load_points(self):
# disable the button afterwards
self._buttons["load_points"].config(state="disabled")
asyncio.gather(*(ch.claim_bonus() for ch in self._manager._twitch.channels.values()))
def _measure(self, text: str) -> int: def _measure(self, text: str) -> int:
# we need this because columns have 9-10 pixels of padding that cuts text off # we need this because columns have 9-10 pixels of padding that cuts text off
return self._font.measure(text) + 10 return self._font.measure(text) + 10
@@ -1038,18 +1025,12 @@ class ChannelList:
viewers = '' viewers = ''
if channel.viewers is not None: if channel.viewers is not None:
viewers = str(channel.viewers) viewers = str(channel.viewers)
# points
points = ''
if channel.points is not None:
points = str(channel.points)
if iid in self._channel_map: if iid in self._channel_map:
self._set(iid, "game", game) self._set(iid, "game", game)
self._set(iid, "drops", drops) self._set(iid, "drops", drops)
self._set(iid, "status", status) self._set(iid, "status", status)
self._set(iid, "viewers", viewers) self._set(iid, "viewers", viewers)
self._set(iid, "acl_base", acl_based) self._set(iid, "acl_base", acl_based)
if points != '': # we still want to display 0
self._set(iid, "points", points)
elif add: elif add:
self._channel_map[iid] = channel self._channel_map[iid] = channel
self._insert( self._insert(
@@ -1057,7 +1038,6 @@ class ChannelList:
{ {
"game": game, "game": game,
"drops": drops, "drops": drops,
"points": points,
"status": status, "status": status,
"viewers": viewers, "viewers": viewers,
"acl_base": acl_based, "acl_base": acl_based,
@@ -2320,7 +2300,6 @@ if __name__ == "__main__":
game: str | None, game: str | None,
drops: bool, drops: bool,
viewers: int, viewers: int,
points: int,
acl_based: bool, acl_based: bool,
): ):
# status: 0 -> OFFLINE, 1 -> PENDING_ONLINE, 2 -> ONLINE # status: 0 -> OFFLINE, 1 -> PENDING_ONLINE, 2 -> ONLINE
@@ -2337,7 +2316,6 @@ if __name__ == "__main__":
return SimpleNamespace( return SimpleNamespace(
name=name, name=name,
iid=(iid := iid + 1), iid=(iid := iid + 1),
points=points,
online=bool(status), online=bool(status),
pending_online=pending, pending_online=pending,
game=game_obj, game=game_obj,
@@ -2374,7 +2352,7 @@ if __name__ == "__main__":
expired=False, expired=False,
active=False, active=False,
upcoming=True, upcoming=True,
linked=False, eligible=False,
finished=False, finished=False,
link_url="https://google.com", link_url="https://google.com",
image_url="https://static-cdn.jtvnw.net/ttv-boxart/460630-285x380.jpg", image_url="https://static-cdn.jtvnw.net/ttv-boxart/460630-285x380.jpg",
@@ -2449,13 +2427,12 @@ if __name__ == "__main__":
game=None, game=None,
drops=False, drops=False,
viewers=0, viewers=0,
points=0,
acl_based=True, acl_based=True,
), ),
add=True, add=True,
) )
channel = create_channel( channel = create_channel(
name="Traitus", status=1, game=None, drops=False, viewers=0, points=0, acl_based=True name="Traitus", status=1, game=None, drops=False, viewers=0, acl_based=True
) )
gui.channels.display(channel, add=True) gui.channels.display(channel, add=True)
gui.channels.set_watching(channel) gui.channels.set_watching(channel)
@@ -2466,7 +2443,6 @@ if __name__ == "__main__":
game="Best Game", game="Best Game",
drops=True, drops=True,
viewers=42, viewers=42,
points=1234567,
acl_based=False, acl_based=False,
), ),
add=True, add=True,
@@ -2478,7 +2454,6 @@ if __name__ == "__main__":
game="Best Game", game="Best Game",
drops=True, drops=True,
viewers=69, viewers=69,
points=1234567,
acl_based=False, acl_based=False,
), ),
add=True, add=True,
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} går ONLINE, skifter...", "goes_online": "{channel} går ONLINE, skifter...",
"goes_offline": "{channel} går OFFLINE, skifter...", "goes_offline": "{channel} går OFFLINE, skifter...",
"claimed_drop": "Hentet belønning: {drop}", "claimed_drop": "Hentet belønning: {drop}",
"claimed_points": "Hentet ekstra points: {points}",
"earned_points": "Optjente point for at se: {points}, Total: {balance}",
"no_channel": "Ingen tilgængelige kanaler at se. Venter på en ONLINE kanal...", "no_channel": "Ingen tilgængelige kanaler at se. Venter på en ONLINE kanal...",
"no_campaign": "Der er ingen aktive kampagner at hente. Venter på en aktiv kampagne..." "no_campaign": "Der er ingen aktive kampagner at hente. Venter på en aktiv kampagne..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Kanaler", "name": "Kanaler",
"switch": "Skift", "switch": "Skift",
"load_points": "Indlæs Points",
"online": "ONLINE \u2714", "online": "ONLINE \u2714",
"pending": "OFFLINE \u23f3", "pending": "OFFLINE \u23f3",
"offline": "OFFLINE \u274c", "offline": "OFFLINE \u274c",
@@ -100,8 +97,7 @@
"channel": "Kanal", "channel": "Kanal",
"status": "Status", "status": "Status",
"game": "Spil", "game": "Spil",
"viewers": "Seere", "viewers": "Seere"
"points": "Points"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} ist ONLINE gegangen, wechseln...", "goes_online": "{channel} ist ONLINE gegangen, wechseln...",
"goes_offline": "{channel} ist OFFLINE gegangen, wechseln...", "goes_offline": "{channel} ist OFFLINE gegangen, wechseln...",
"claimed_drop": "Drop abgeholt: {drop}", "claimed_drop": "Drop abgeholt: {drop}",
"claimed_points": "Kanal-Punkte verdient: {points}",
"earned_points": "Verdiente Kanal-Punkte fürs zuschauen: {points} | Summe: {balance}",
"no_channel": "Keine teilnehmenden Kanäle online. Warten auf Kanäle...", "no_channel": "Keine teilnehmenden Kanäle online. Warten auf Kanäle...",
"no_campaign": "Keine aktiven Kampagnen verfügbar. Warten auf neue Kampagne..." "no_campaign": "Keine aktiven Kampagnen verfügbar. Warten auf neue Kampagne..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Kanäle", "name": "Kanäle",
"switch": "Wechseln", "switch": "Wechseln",
"load_points": "Lade Punkte",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Kanal", "channel": "Kanal",
"status": "Status", "status": "Status",
"game": "Spiel", "game": "Spiel",
"viewers": "Zuschauer", "viewers": "Zuschauer"
"points": "Punkte"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "El canal {channel} se ha conectado, cambiando...", "goes_online": "El canal {channel} se ha conectado, cambiando...",
"goes_offline": "El canal {channel} se ha desconectado, cambiando...", "goes_offline": "El canal {channel} se ha desconectado, cambiando...",
"claimed_drop": "Drop reclamado: {drop}", "claimed_drop": "Drop reclamado: {drop}",
"claimed_points": "Recompensa de puntos reclamados: {points}",
"earned_points": "Puntos obtenidos por mirar el stream: {points} | Total: {balance}",
"no_channel": "No se ha encontrado un canal en vivo para mirar. \nEsperando un canal en vivo...", "no_channel": "No se ha encontrado un canal en vivo para mirar. \nEsperando un canal en vivo...",
"no_campaign": "No se ha encontrado una campaña activa. \nEsperando una nueva campaña..." "no_campaign": "No se ha encontrado una campaña activa. \nEsperando una nueva campaña..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Canales", "name": "Canales",
"switch": "Cambiar", "switch": "Cambiar",
"load_points": "Cargar Puntos",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Canal", "channel": "Canal",
"status": "Estado", "status": "Estado",
"game": "Juego", "game": "Juego",
"viewers": "Espectadores", "viewers": "Espectadores"
"points": "Puntos"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} passe EN LIGNE, changement...", "goes_online": "{channel} passe EN LIGNE, changement...",
"goes_offline": "{channel} passe HORS LIGNE, changement...", "goes_offline": "{channel} passe HORS LIGNE, changement...",
"claimed_drop": "Drop récupéré : {drop}", "claimed_drop": "Drop récupéré : {drop}",
"claimed_points": "Points bonus récupéré : {points}",
"earned_points": "Points gagnés pour avoir regardé : {points}, total : {balance}",
"no_channel": "Aucune chaîne disponible à regarder. En attente d'une chaîne EN LIGNE...", "no_channel": "Aucune chaîne disponible à regarder. En attente d'une chaîne EN LIGNE...",
"no_campaign": "Aucune campagne active pour laquelle miner des drops. En attente d'une campagne active..." "no_campaign": "Aucune campagne active pour laquelle miner des drops. En attente d'une campagne active..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Chaînes", "name": "Chaînes",
"switch": "Basculer", "switch": "Basculer",
"load_points": "Charger des Points",
"online": "EN LIGNE ✔", "online": "EN LIGNE ✔",
"pending": "HORS LIGNE ⏳", "pending": "HORS LIGNE ⏳",
"offline": "HORS LIGNE ❌", "offline": "HORS LIGNE ❌",
@@ -100,8 +97,7 @@
"channel": "Chaîne", "channel": "Chaîne",
"status": "Statut", "status": "Statut",
"game": "Jeu", "game": "Jeu",
"viewers": "Spectateurs", "viewers": "Spectateurs"
"points": "Points"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} Tiket masuk ONLINE, ganti...", "goes_online": "{channel} Tiket masuk ONLINE, ganti...",
"goes_offline": "{channel} menjadi OFF-LINE, ubah...", "goes_offline": "{channel} menjadi OFF-LINE, ubah...",
"claimed_drop": "Drop dipulihkan : {drop}", "claimed_drop": "Drop dipulihkan : {drop}",
"claimed_points": "Poin bonus yang dipulihkan: {points}",
"earned_points": "Poin yang diperoleh dari menonton : {points}, jumlah : {balance}",
"no_channel": "Tidak ada saluran yang tersedia untuk ditonton. Menunggu saluran secara ONLINE...", "no_channel": "Tidak ada saluran yang tersedia untuk ditonton. Menunggu saluran secara ONLINE...",
"no_campaign": "Tidak ada kampanye aktif yang bisa ditambang. Menunggu kampanye aktif..." "no_campaign": "Tidak ada kampanye aktif yang bisa ditambang. Menunggu kampanye aktif..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Saluran", "name": "Saluran",
"switch": "Beralih", "switch": "Beralih",
"load_points": "Poin Pemuatan",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "DITUNDA ⏳", "pending": "DITUNDA ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Saluran", "channel": "Saluran",
"status": "Status", "status": "Status",
"game": "Game", "game": "Game",
"viewers": "Penonton", "viewers": "Penonton"
"points": "Poin"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} è ONLINE, cambiando...", "goes_online": "{channel} è ONLINE, cambiando...",
"goes_offline": "{channel} è OFFLINE, cambiando...", "goes_offline": "{channel} è OFFLINE, cambiando...",
"claimed_drop": "Contenuti riscattati: {drop}", "claimed_drop": "Contenuti riscattati: {drop}",
"claimed_points": "Punti bonus riscattati: {points}",
"earned_points": "Punti bonus guadagnati per aver guardato la stream: {points}, totale: {balance}",
"no_channel": "Nessun canale disponibile da guardare. In attesa di un canale ONLINE...", "no_channel": "Nessun canale disponibile da guardare. In attesa di un canale ONLINE...",
"no_campaign": "Nessuna campagna attiva per ottenere i premi. In attesa di una campagna attiva..." "no_campaign": "Nessuna campagna attiva per ottenere i premi. In attesa di una campagna attiva..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Canali", "name": "Canali",
"switch": "Cambia", "switch": "Cambia",
"load_points": "Carica Punti",
"online": "ONLINE \u2714", "online": "ONLINE \u2714",
"pending": "OFFLINE \u23f3", "pending": "OFFLINE \u23f3",
"offline": "OFFLINE \u274c", "offline": "OFFLINE \u274c",
@@ -100,8 +97,7 @@
"channel": "Canale", "channel": "Canale",
"status": "Stato", "status": "Stato",
"game": "Gioco", "game": "Gioco",
"viewers": "Spettatori", "viewers": "Spettatori"
"points": "Punti"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} is ONLINE gegaan, wijzig...", "goes_online": "{channel} is ONLINE gegaan, wijzig...",
"goes_offline": "{channel} is OFFLINE gegaan, wijzig...", "goes_offline": "{channel} is OFFLINE gegaan, wijzig...",
"claimed_drop": "Drop verkregen: {drop}", "claimed_drop": "Drop verkregen: {drop}",
"claimed_points": "Kanaal punten verdient: {points}",
"earned_points": "Verdiende kanaalpunten voor het kijken: {points} | Totaal: {balance}",
"no_channel": "Geen deelnemende kanalen online. Wachten op steamers...", "no_channel": "Geen deelnemende kanalen online. Wachten op steamers...",
"no_campaign": "Geen actieve campagnes beschikbaar. Wachten op nieuwe campagne..." "no_campaign": "Geen actieve campagnes beschikbaar. Wachten op nieuwe campagne..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Kanaal", "name": "Kanaal",
"switch": "Wisselen", "switch": "Wisselen",
"load_points": "Laad Punten",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Kanaal", "channel": "Kanaal",
"status": "Status", "status": "Status",
"game": "Spel", "game": "Spel",
"viewers": "Kijkers", "viewers": "Kijkers"
"points": "Punten"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "Nowy status kanału {channel}: ONLINE, zmieniam...", "goes_online": "Nowy status kanału {channel}: ONLINE, zmieniam...",
"goes_offline": "Nowy status kanału {channel}: OFFLINE, zmieniam...", "goes_offline": "Nowy status kanału {channel}: OFFLINE, zmieniam...",
"claimed_drop": "Odebrano drop: {drop}", "claimed_drop": "Odebrano drop: {drop}",
"claimed_points": "Odebrano punkty: {points}",
"earned_points": "Zdobyto punkty za oglądanie: {points} | Łącznie: {balance}",
"no_channel": "Brak możliwych kanałów do oglądania. Oczekiwanie na nową kampanię...", "no_channel": "Brak możliwych kanałów do oglądania. Oczekiwanie na nową kampanię...",
"no_campaign": "Brak dostępnych aktywnych kampanii. Oczekiwanie na nową kampanię..." "no_campaign": "Brak dostępnych aktywnych kampanii. Oczekiwanie na nową kampanię..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Kanały", "name": "Kanały",
"switch": "Zmień", "switch": "Zmień",
"load_points": "Załaduj punkty",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "W TOKU ⏳", "pending": "W TOKU ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Kanał", "channel": "Kanał",
"status": "Status", "status": "Status",
"game": "Gra", "game": "Gra",
"viewers": "Widzowie", "viewers": "Widzowie"
"points": "Punkty"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} esta ONLINE, Mudando...", "goes_online": "{channel} esta ONLINE, Mudando...",
"goes_offline": "{channel} ficou OFFLINE, Mudando...", "goes_offline": "{channel} ficou OFFLINE, Mudando...",
"claimed_drop": "Coletou o drop: {drop}", "claimed_drop": "Coletou o drop: {drop}",
"claimed_points": "Coletou o bonus: {points}",
"earned_points": "Ganhou este valor de pontos: {points}, total: {balance}",
"no_channel": "Sem canal disponivel para assisitir. Esperando por um canal ONLINE...", "no_channel": "Sem canal disponivel para assisitir. Esperando por um canal ONLINE...",
"no_campaign": "Sem campanhas ativas no momento para minerar. Esperando por uma campanha ativa..." "no_campaign": "Sem campanhas ativas no momento para minerar. Esperando por uma campanha ativa..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Canais", "name": "Canais",
"switch": "Trocar", "switch": "Trocar",
"load_points": "Carregar pontos",
"online": "ONLINE \u2714", "online": "ONLINE \u2714",
"pending": "OFFLINE \u23f3", "pending": "OFFLINE \u23f3",
"offline": "OFFLINE \u274c", "offline": "OFFLINE \u274c",
@@ -100,8 +97,7 @@
"channel": "Canal", "channel": "Canal",
"status": "Status", "status": "Status",
"game": "Jogo", "game": "Jogo",
"viewers": "Visualizadores", "viewers": "Visualizadores"
"points": "Pontos"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} intră ONLINE, se schimbă...", "goes_online": "{channel} intră ONLINE, se schimbă...",
"goes_offline": "{channel} intră OFFLINE, se schimbă...", "goes_offline": "{channel} intră OFFLINE, se schimbă...",
"claimed_drop": "Drop-ul a fost recuperat : {drop}", "claimed_drop": "Drop-ul a fost recuperat : {drop}",
"claimed_points": "Puncte bonus colectate : {points}",
"earned_points": "Puncte câștigate pentru vizionare: {points}, totale : {balance}",
"no_channel": "Nu există canale disponibile pentru vizionare. În așteptarea unui canal ONLINE...", "no_channel": "Nu există canale disponibile pentru vizionare. În așteptarea unui canal ONLINE...",
"no_campaign": "Nu există campanii active pentru a mina drop-uri. În așteptarea unei campanii active..." "no_campaign": "Nu există campanii active pentru a mina drop-uri. În așteptarea unei campanii active..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Canale", "name": "Canale",
"switch": "Schimbă", "switch": "Schimbă",
"load_points": "Încarcă puncte",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Canal", "channel": "Canal",
"status": "Statut", "status": "Statut",
"game": "Joc", "game": "Joc",
"viewers": "Spectatori", "viewers": "Spectatori"
"points": "Puncte"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} ÇEVRİMİÇİ oldu, geçiş yapın...", "goes_online": "{channel} ÇEVRİMİÇİ oldu, geçiş yapın...",
"goes_offline": "{channel} ÇEVRİMDIŞI duruma geçti, geçiş yapın...", "goes_offline": "{channel} ÇEVRİMDIŞI duruma geçti, geçiş yapın...",
"claimed_drop": "Alınan drop: {drop}", "claimed_drop": "Alınan drop: {drop}",
"claimed_points": "Kazanılan kanal puanları: {points}",
"earned_points": "İzleme karşılığında kazanılan kanal puanları: {points} | Toplam: {balance}",
"no_channel": "Çevrimiçi katılımcı kanal yok. Kanallar bekleniyor...", "no_channel": "Çevrimiçi katılımcı kanal yok. Kanallar bekleniyor...",
"no_campaign": "Etkin kampanya yok. Yeni kampanya bekleniyor..." "no_campaign": "Etkin kampanya yok. Yeni kampanya bekleniyor..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Kanallar", "name": "Kanallar",
"switch": "Değiştir", "switch": "Değiştir",
"load_points": "Puanları Yükle",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "Kanal", "channel": "Kanal",
"status": "Durum", "status": "Durum",
"game": "Oyun", "game": "Oyun",
"viewers": "İzleyici", "viewers": "İzleyici"
"points": "Puan"
} }
}, },
"inventory": { "inventory": {
-4
View File
@@ -6,8 +6,6 @@
"goes_online": "Kanál {channel} je online, přepínám...", "goes_online": "Kanál {channel} je online, přepínám...",
"goes_offline": "Kanál {channel} je offline, přepínám na další...", "goes_offline": "Kanál {channel} je offline, přepínám na další...",
"claimed_drop": "Drop vyzvednut: {drop}", "claimed_drop": "Drop vyzvednut: {drop}",
"claimed_points": "Vyzvednuto {points} bodů",
"earned_points": "Získáno {points} bodů za sledování. Celkem: {balance}",
"no_channel": "Žádný kanál není dostupný, čekání na další...", "no_channel": "Žádný kanál není dostupný, čekání na další...",
"no_campaign": "Žádné dropy k dispozici, čekání na další dostupné dropy..." "no_campaign": "Žádné dropy k dispozici, čekání na další dostupné dropy..."
}, },
@@ -85,14 +83,12 @@
"channels": { "channels": {
"name": "Název", "name": "Název",
"switch": "Přepnout", "switch": "Přepnout",
"load_points": "Načíst body",
"online": "ONLINE \u2714", "online": "ONLINE \u2714",
"pending": "PRŮBĚH \u23f3", "pending": "PRŮBĚH \u23f3",
"offline": "OFFLINE \u274c", "offline": "OFFLINE \u274c",
"headings": { "headings": {
"channel": "Kanál", "channel": "Kanál",
"game": "Hra", "game": "Hra",
"points": "Body",
"status": "Status", "status": "Status",
"viewers": "Diváci" "viewers": "Diváci"
} }
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "Изменение: {channel} онлайн", "goes_online": "Изменение: {channel} онлайн",
"goes_offline": "Изменение: {channel} онлайн", "goes_offline": "Изменение: {channel} онлайн",
"claimed_drop": "Drop получено: {drop}", "claimed_drop": "Drop получено: {drop}",
"claimed_points": "Получены очки канала: {points}",
"earned_points": "За просмотр начисляются очки канала: {points} | Сумма: {balance}",
"no_channel": "Нет участвующих каналов онлайн. Ожидание каналов...", "no_channel": "Нет участвующих каналов онлайн. Ожидание каналов...",
"no_campaign": "Нет участвующих кампаний онлайн. Ожидание кампаний..." "no_campaign": "Нет участвующих кампаний онлайн. Ожидание кампаний..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Каналы", "name": "Каналы",
"switch": "Изменить", "switch": "Изменить",
"load_points": "Загрузить баллы",
"online": "ОНЛАЙН ✔", "online": "ОНЛАЙН ✔",
"pending": "ОЖИДАНИЕ ⏳", "pending": "ОЖИДАНИЕ ⏳",
"offline": "ОФЛАЙН ❌", "offline": "ОФЛАЙН ❌",
@@ -100,8 +97,7 @@
"channel": "Канал", "channel": "Канал",
"status": "Статус", "status": "Статус",
"game": "Игра", "game": "Игра",
"viewers": "Зрители", "viewers": "Зрители"
"points": "Баллы"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} онлайн, зміна...", "goes_online": "{channel} онлайн, зміна...",
"goes_offline": "{channel} офлайн, зміна...", "goes_offline": "{channel} офлайн, зміна...",
"claimed_drop": "Отримано дроп: {drop}", "claimed_drop": "Отримано дроп: {drop}",
"claimed_points": "Отримано {points} бонусних балів",
"earned_points": "Зароблено {points} балів за перегляд, усього: {balance}",
"no_channel": "Немає активних каналів для перегляду. Очікування...", "no_channel": "Немає активних каналів для перегляду. Очікування...",
"no_campaign": "Немає активних каналів для видобутку дропів. Очікування..." "no_campaign": "Немає активних каналів для видобутку дропів. Очікування..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "Канали", "name": "Канали",
"switch": "Перемкнути", "switch": "Перемкнути",
"load_points": "Завантажити бали",
"online": "ОНЛАЙН \u2714", "online": "ОНЛАЙН \u2714",
"pending": "ОФЛАЙН \u23f3", "pending": "ОФЛАЙН \u23f3",
"offline": "ОФЛАЙН \u274c", "offline": "ОФЛАЙН \u274c",
@@ -100,8 +97,7 @@
"channel": "Канал", "channel": "Канал",
"status": "Стан", "status": "Стан",
"game": "Гра", "game": "Гра",
"viewers": "Глядачі", "viewers": "Глядачі"
"points": "Бали"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "...اصبح نشط ، تبديل {channel}", "goes_online": "...اصبح نشط ، تبديل {channel}",
"goes_offline": "...اصبح غير نشط ، تبديل {channel}", "goes_offline": "...اصبح غير نشط ، تبديل {channel}",
"claimed_drop": "{drop} :تم الحصول على", "claimed_drop": "{drop} :تم الحصول على",
"claimed_points": "تم الحصول على: {points} من النقاط الإضافية",
"earned_points": "تم الحصول على:{points} من نقاط المشاهدة ، الإجمالي: {balance}",
"no_channel": "...لا توجد قنوات نشطة متاحة للمشاهدة. في انتظار قناة نشطة", "no_channel": "...لا توجد قنوات نشطة متاحة للمشاهدة. في انتظار قناة نشطة",
"no_campaign": "...لا توجد حملات نشطة من اجل تنقيب الإسقاطات. في انتظار حملة نشطة" "no_campaign": "...لا توجد حملات نشطة من اجل تنقيب الإسقاطات. في انتظار حملة نشطة"
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "القنوات", "name": "القنوات",
"switch": "تبديل", "switch": "تبديل",
"load_points": "تحميل النقاط",
"online": "\u2714 نشط", "online": "\u2714 نشط",
"pending": "\u23f3 غير نشط", "pending": "\u23f3 غير نشط",
"offline": "\u274c غير نشط", "offline": "\u274c غير نشط",
@@ -100,8 +97,7 @@
"channel": "القناة", "channel": "القناة",
"status": "الحالة", "status": "الحالة",
"game": "اللعبة", "game": "اللعبة",
"viewers": "المشاهدين", "viewers": "المشاهدين"
"points": "النقاط"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} がオンラインになりました。切り替え中...", "goes_online": "{channel} がオンラインになりました。切り替え中...",
"goes_offline": "{channel} がオフラインになりました。切り替え中...", "goes_offline": "{channel} がオフラインになりました。切り替え中...",
"claimed_drop": "ドロップを取得しました:{drop}", "claimed_drop": "ドロップを取得しました:{drop}",
"claimed_points": "ボーナスポイントを受け取りました:{points}",
"earned_points": "視聴ポイントを獲得しました:{points}、合計:{balance}",
"no_channel": "視聴可能なチャンネルがありません。オンラインになるチャンネルを待機中...", "no_channel": "視聴可能なチャンネルがありません。オンラインになるチャンネルを待機中...",
"no_campaign": "マイニングするドロップがないアクティブなキャンペーンはありません。アクティブなキャンペーンを待機中..." "no_campaign": "マイニングするドロップがないアクティブなキャンペーンはありません。アクティブなキャンペーンを待機中..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "チャンネル", "name": "チャンネル",
"switch": "切り替え", "switch": "切り替え",
"load_points": "ポイントを読み込む",
"online": "オンライン \u2714", "online": "オンライン \u2714",
"pending": "オフライン中 \u23f3", "pending": "オフライン中 \u23f3",
"offline": "オフライン \u274c", "offline": "オフライン \u274c",
@@ -100,8 +97,7 @@
"channel": "チャンネル", "channel": "チャンネル",
"status": "ステータス", "status": "ステータス",
"game": "ゲーム", "game": "ゲーム",
"viewers": "視聴者数", "viewers": "視聴者数"
"points": "ポイント"
} }
}, },
"inventory": { "inventory": {
+1 -5
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} 该频道已上线, 正在切换...", "goes_online": "{channel} 该频道已上线, 正在切换...",
"goes_offline": "{channel} 该频道已离线, 正在切换...", "goes_offline": "{channel} 该频道已离线, 正在切换...",
"claimed_drop": "已领取掉宝: {drop}", "claimed_drop": "已领取掉宝: {drop}",
"claimed_points": "已领取积分奖励: {points}",
"earned_points": "观看直播获得积分: {points}, 总积分: {balance}",
"no_channel": "没有可观看的频道,等待一个在线直播频道...", "no_channel": "没有可观看的频道,等待一个在线直播频道...",
"no_campaign": "没有可用于掉宝的活动,等待一个有效的掉宝活动..." "no_campaign": "没有可用于掉宝的活动,等待一个有效的掉宝活动..."
}, },
@@ -92,7 +90,6 @@
"channels": { "channels": {
"name": "活动频道", "name": "活动频道",
"switch": "切换", "switch": "切换",
"load_points": "加载积分",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -100,8 +97,7 @@
"channel": "直播频道", "channel": "直播频道",
"status": "在线状态", "status": "在线状态",
"game": "游戏", "game": "游戏",
"viewers": "观众", "viewers": "观众"
"points": "积分"
} }
}, },
"inventory": { "inventory": {
-4
View File
@@ -6,8 +6,6 @@
"goes_online": "{channel} 頻道已開始實況,正在跳轉…", "goes_online": "{channel} 頻道已開始實況,正在跳轉…",
"goes_offline": "{channel} 頻道已結束實況,正在跳轉…", "goes_offline": "{channel} 頻道已結束實況,正在跳轉…",
"claimed_drop": "已領取掉寶:{drop}", "claimed_drop": "已領取掉寶:{drop}",
"claimed_points": "已領取積分獎勵:{points}",
"earned_points": "已觀看實況獲得積分:{points},總積分:{balance}",
"no_channel": "沒有可觀看的頻道,正在等待一個正在實況的頻道…", "no_channel": "沒有可觀看的頻道,正在等待一個正在實況的頻道…",
"no_campaign": "沒有可用於掉寶的活動,正在等待一個有效的掉寶活動…" "no_campaign": "沒有可用於掉寶的活動,正在等待一個有效的掉寶活動…"
}, },
@@ -92,14 +90,12 @@
"channels": { "channels": {
"name": "活動頻道", "name": "活動頻道",
"switch": "切換", "switch": "切換",
"load_points": "載入積分",
"online": "上線 \u2714", "online": "上線 \u2714",
"pending": "離線 \u23f3", "pending": "離線 \u23f3",
"offline": "離線 \u274c", "offline": "離線 \u274c",
"headings": { "headings": {
"channel": "頻道", "channel": "頻道",
"game": "遊戲", "game": "遊戲",
"points": "積分",
"status": "狀態", "status": "狀態",
"viewers": "觀眾" "viewers": "觀眾"
} }
-8
View File
@@ -17,8 +17,6 @@ class StatusMessages(TypedDict):
goes_online: str goes_online: str
goes_offline: str goes_offline: str
claimed_drop: str claimed_drop: str
claimed_points: str
earned_points: str
no_channel: str no_channel: str
no_campaign: str no_campaign: str
@@ -113,14 +111,12 @@ class GUIChannelHeadings(TypedDict):
channel: str channel: str
status: str status: str
game: str game: str
points: str
viewers: str viewers: str
class GUIChannels(TypedDict): class GUIChannels(TypedDict):
name: str name: str
switch: str switch: str
load_points: str
online: str online: str
pending: str pending: str
offline: str offline: str
@@ -230,8 +226,6 @@ default_translation: Translation = {
"goes_online": "{channel} goes ONLINE, switching...", "goes_online": "{channel} goes ONLINE, switching...",
"goes_offline": "{channel} goes OFFLINE, switching...", "goes_offline": "{channel} goes OFFLINE, switching...",
"claimed_drop": "Claimed drop: {drop}", "claimed_drop": "Claimed drop: {drop}",
"claimed_points": "Claimed bonus points: {points}",
"earned_points": "Earned points for watching: {points}, total: {balance}",
"no_channel": "No available channels to watch. Waiting for an ONLINE channel...", "no_channel": "No available channels to watch. Waiting for an ONLINE channel...",
"no_campaign": "No active campaigns to mine drops for. Waiting for an active campaign...", "no_campaign": "No active campaigns to mine drops for. Waiting for an active campaign...",
}, },
@@ -323,7 +317,6 @@ default_translation: Translation = {
"channels": { "channels": {
"name": "Channels", "name": "Channels",
"switch": "Switch", "switch": "Switch",
"load_points": "Load Points",
"online": "ONLINE ✔", "online": "ONLINE ✔",
"pending": "OFFLINE ⏳", "pending": "OFFLINE ⏳",
"offline": "OFFLINE ❌", "offline": "OFFLINE ❌",
@@ -332,7 +325,6 @@ default_translation: Translation = {
"status": "Status", "status": "Status",
"game": "Game", "game": "Game",
"viewers": "Viewers", "viewers": "Viewers",
"points": "Points",
}, },
}, },
"inventory": { "inventory": {
+4 -87
View File
@@ -613,7 +613,6 @@ class Twitch:
# Add default topics # Add default topics
self.websocket.add_topics([ self.websocket.add_topics([
WebsocketTopic("User", "Drops", auth_state.user_id, self.process_drops), WebsocketTopic("User", "Drops", auth_state.user_id, self.process_drops),
WebsocketTopic("User", "CommunityPoints", auth_state.user_id, self.process_points),
WebsocketTopic( WebsocketTopic(
"User", "Notifications", auth_state.user_id, self.process_notifications "User", "Notifications", auth_state.user_id, self.process_notifications
), ),
@@ -937,26 +936,17 @@ class Twitch:
@task_wrapper(critical=True) @task_wrapper(critical=True)
async def _maintenance_task(self) -> None: async def _maintenance_task(self) -> None:
claim_period = timedelta(minutes=30)
max_period = timedelta(hours=1)
now = datetime.now(timezone.utc) now = datetime.now(timezone.utc)
next_period = now + max_period next_period = now + timedelta(hours=1)
while True: while True:
# exit if there's no need to repeat the loop # exit if there's no need to repeat the loop
now = datetime.now(timezone.utc) now = datetime.now(timezone.utc)
if now >= next_period: if now >= next_period:
break break
next_trigger = min(now + claim_period, next_period) next_trigger = next_period
trigger_cleanup = False
while self._mnt_triggers and self._mnt_triggers[0] <= next_trigger: while self._mnt_triggers and self._mnt_triggers[0] <= next_trigger:
next_trigger = self._mnt_triggers.popleft() next_trigger = self._mnt_triggers.popleft()
trigger_cleanup = True trigger_type: str = "Reload" if next_trigger == next_period else "Cleanup"
if next_trigger == next_period:
trigger_type: str = "Reload"
elif trigger_cleanup:
trigger_type = "Cleanup"
else:
trigger_type = "Points"
logger.log( logger.log(
CALL, CALL,
( (
@@ -969,16 +959,9 @@ class Twitch:
now = datetime.now(timezone.utc) now = datetime.now(timezone.utc)
if now >= next_period: if now >= next_period:
break break
if trigger_cleanup: if next_trigger != next_period:
logger.log(CALL, "Maintenance task requests channels cleanup") logger.log(CALL, "Maintenance task requests channels cleanup")
self.change_state(State.CHANNELS_CLEANUP) self.change_state(State.CHANNELS_CLEANUP)
# ensure that we don't have unclaimed points bonus
watching_channel = self.watching_channel.get_with_default(None)
if watching_channel is not None:
try:
await watching_channel.claim_bonus()
except Exception:
pass # we intentionally silently skip anything else
# this triggers a restart of this task every (up to) 60 minutes # this triggers a restart of this task every (up to) 60 minutes
logger.log(CALL, "Maintenance task requests a reload") logger.log(CALL, "Maintenance task requests a reload")
self.change_state(State.INVENTORY_FETCH) self.change_state(State.INVENTORY_FETCH)
@@ -1224,65 +1207,6 @@ class Twitch:
) )
) )
@task_wrapper
async def process_points(self, user_id: int, message: JsonType):
# Example payloads:
# {
# "type": "points-earned",
# "data": {
# "timestamp": "YYYY-MM-DDTHH:MM:SS.UUUUUUUUUZ",
# "channel_id": "123456789",
# "point_gain": {
# "user_id": "12345678",
# "channel_id": "123456789",
# "total_points": 10,
# "baseline_points": 10,
# "reason_code": "WATCH",
# "multipliers": []
# },
# "balance": {
# "user_id": "12345678",
# "channel_id": "123456789",
# "balance": 12345
# }
# }
# }
# {
# "type": "claim-available",
# "data": {
# "timestamp":"YYYY-MM-DDTHH:MM:SS.UUUUUUUUUZ",
# "claim": {
# "id": "4ae6fefd-1234-40ae-ad3d-92254c576a91",
# "user_id": "12345678",
# "channel_id": "123456789",
# "point_gain": {
# "user_id": "12345678",
# "channel_id": "123456789",
# "total_points": 50,
# "baseline_points": 50,
# "reason_code": "CLAIM",
# "multipliers": []
# },
# "created_at": "YYYY-MM-DDTHH:MM:SSZ"
# }
# }
# }
msg_type = message["type"]
if msg_type == "points-earned":
data: JsonType = message["data"]
channel: Channel | None = self.channels.get(int(data["channel_id"]))
points: int = data["point_gain"]["total_points"]
balance: int = data["balance"]["balance"]
if channel is not None:
channel.points = balance
channel.display()
self.print(_("status", "earned_points").format(points=f"{points:3}", balance=balance))
elif msg_type == "claim-available":
claim_data = message["data"]["claim"]
points = claim_data["point_gain"]["total_points"]
await self.claim_points(claim_data["channel_id"], claim_data["id"])
self.print(_("status", "claimed_points").format(points=points))
async def get_auth(self) -> _AuthState: async def get_auth(self) -> _AuthState:
await self._auth_state.validate() await self._auth_state.validate()
return self._auth_state return self._auth_state
@@ -1617,13 +1541,6 @@ class Twitch:
] ]
return [] return []
async def claim_points(self, channel_id: str | int, claim_id: str) -> None:
await self.gql_request(
GQL_OPERATIONS["ClaimCommunityPoints"].with_variables(
{"input": {"channelID": str(channel_id), "claimID": claim_id}}
)
)
async def bulk_check_online(self, channels: abc.Iterable[Channel]): async def bulk_check_online(self, channels: abc.Iterable[Channel]):
""" """
Utilize batch GQL requests to check ONLINE status for a lot of channels at once. Utilize batch GQL requests to check ONLINE status for a lot of channels at once.