Giter VIP home page Giter VIP logo

mmattdonk / ai-tts-donations Goto Github PK

View Code? Open in Web Editor NEW
81.0 4.0 17.0 97.16 MB

๐Ÿฆ†๐Ÿ’ฐ A bot that uses Uberduck (and FakeYou) AI to make bit donations have an AI voice.

Home Page: https://staging.solrock.mmattDonk.com

License: GNU Affero General Public License v3.0

Python 13.09% TypeScript 76.57% JavaScript 4.46% CSS 1.20% MDX 2.91% Astro 1.77%
twitch twitch-api ai ai-voice twitch-donations twitch-bot python uberduck fakeyou tts-donations

ai-tts-donations's People

Contributors

12beesinatrenchcoat avatar allcontributors[bot] avatar dacops avatar dependabot[bot] avatar github-actions[bot] avatar humanoidsandvichdispenser avatar imgbot[bot] avatar kodiakhq[bot] avatar mmattbtw avatar mopoio avatar mrauro avatar navarr avatar pre-commit-ci[bot] avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

ai-tts-donations's Issues

UI stops responding after Testing TTS

This happens because we are not using multithreading at the moment, I tried to get multithreading to work, however it just didn't work. So if you know how to get multithreading working, I'd appreciate a PR :)

Custom voice prefix

Instead of having the uberduck model name, it could be handy to have a way to have custom prefixes for voices, for example:
narrator=fate-ur-ts-tck-narrator this way it would recognize narrator: message as fate-ur-ts-tck-narrator: message

[httpx] ReadTimeout: The read operation timed out

Sentry Issue: AI-TTS-DONATIONS-3

ReadTimeout: The read operation timed out
(5 additional frame(s) were not displayed)
...
  File "httpcore\_sync\http11.py", line 189, in _receive_response
    event = self._receive_event(timeout)
  File "httpcore\_sync\http11.py", line 225, in _receive_event
    data = self.socket.read(self.READ_NUM_BYTES, timeout)
  File "httpcore\_backends\sync.py", line 61, in read
    return self.sock.recv(n)
  File "contextlib.py", line 137, in __exit__
    self.gen.throw(typ, value, traceback)
  File "httpcore\_exceptions.py", line 12, in map_exceptions
    raise to_exc(exc) from None

ReadTimeout: The read operation timed out
(9 additional frame(s) were not displayed)
...
  File "httpx\_client.py", line 942, in _send_handling_redirects
    response = self._send_single_request(request)
  File "httpx\_client.py", line 978, in _send_single_request
    response = transport.handle_request(request)
  File "httpx\_transports\default.py", line 177, in handle_request
    status_code, headers, byte_stream, extensions = self._pool.handle_request(
  File "contextlib.py", line 137, in __exit__
    self.gen.throw(typ, value, traceback)
  File "httpx\_transports\default.py", line 79, in map_httpcore_exceptions
    raise mapped_exc(message) from exc

Ignore words list

like blacklisting, except it just replaces the word instead of blocking the tts

make a server client

serve the audio via an overlay, maybe a new repo for this? it would be really niche.

its really meant for the IT nerds for streamers to be able to set it up by themselves and have the streamer just input 1 overlay into their OBS.

Fix If Elif spam in playsounds code.

This is, safe to say, awful.

AI-TTS-Donations/bot.py

Lines 116 to 511 in e3512f6

if "(1)" in message:
voice_files.append(f"./playsounds/001-alarm.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(2)" in message:
voice_files.append(f"./playsounds/002-beads.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(3)" in message:
voice_files.append(f"./playsounds/003-beep1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(4)" in message:
voice_files.append(f"./playsounds/004-beep1-faster.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(5)" in message:
voice_files.append(f"./playsounds/005-beep1-flatline.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(6)" in message:
voice_files.append(f"./playsounds/006-beep2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(7)" in message:
voice_files.append(f"./playsounds/007-bell.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(8)" in message:
voice_files.append(f"./playsounds/008-bite.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(9)" in message:
voice_files.append(f"./playsounds/009-bottle.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(10)" in message:
voice_files.append(f"./playsounds/010-bottleuncork.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(11)" in message:
voice_files.append(f"./playsounds/011-bubble.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(12)" in message:
voice_files.append(f"./playsounds/012-camera.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(13)" in message:
voice_files.append(f"./playsounds/013-cardfan.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(14)" in message:
voice_files.append(f"./playsounds/014-cardplace.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(15)" in message:
voice_files.append(f"./playsounds/015-cardshuffle.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(16)" in message:
voice_files.append(f"./playsounds/016-chiplay.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(17)" in message:
voice_files.append(f"./playsounds/017-chop1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(18)" in message:
voice_files.append(f"./playsounds/018-chop2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(19)" in message:
voice_files.append(f"./playsounds/019-clamour.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(20)" in message:
voice_files.append(f"./playsounds/020-coin.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(21)" in message:
voice_files.append(f"./playsounds/021-coins.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(22)" in message:
voice_files.append(f"./playsounds/022-cupboard-open.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(23)" in message:
voice_files.append(f"./playsounds/023-dialing-phone.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(24)" in message:
voice_files.append(f"./playsounds/024-dicethrow.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(25)" in message:
voice_files.append(f"./playsounds/025-die1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(26)" in message:
voice_files.append(f"./playsounds/026-dig1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(27)" in message:
voice_files.append(f"./playsounds/027-dig2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(28)" in message:
voice_files.append(f"./playsounds/028-dig3.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(29)" in message:
voice_files.append(f"./playsounds/029-dog-bark1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(30)" in message:
voice_files.append(f"./playsounds/030-dog-bark2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(31)" in message:
voice_files.append(f"./playsounds/031-dog-bark3.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(32)" in message:
voice_files.append(f"./playsounds/032-dog-bark4.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(33)" in message:
voice_files.append(f"./playsounds/033-dog-ruff1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(34)" in message:
voice_files.append(f"./playsounds/034-dog-whine1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(35)" in message:
voice_files.append(f"./playsounds/035-dog-whine2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(36)" in message:
voice_files.append(f"./playsounds/036-dog-whine3.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(37)" in message:
voice_files.append(f"./playsounds/037-dog-yip1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(38)" in message:
voice_files.append(f"./playsounds/038-dog-yip2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(39)" in message:
voice_files.append(f"./playsounds/039-donk.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(40)" in message:
voice_files.append(f"./playsounds/040-door-close1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(41)" in message:
voice_files.append(f"./playsounds/041-door-close2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(42)" in message:
voice_files.append(f"./playsounds/042-door-open1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(43)" in message:
voice_files.append(f"./playsounds/043-door-open2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(44)" in message:
voice_files.append(f"./playsounds/044-door-open-creak.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(45)" in message:
voice_files.append(f"./playsounds/045-drink1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(46)" in message:
voice_files.append(f"./playsounds/046-drink2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(47)" in message:
voice_files.append(f"./playsounds/047-explosion.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(48)" in message:
voice_files.append(f"./playsounds/048-finger-snap.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(49)" in message:
voice_files.append(f"./playsounds/049-footsteps1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(50)" in message:
voice_files.append(f"./playsounds/050-footsteps2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(51)" in message:
voice_files.append(f"./playsounds/051-footsteps3.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(52)" in message:
voice_files.append(f"./playsounds/052-footsteps4.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(53)" in message:
voice_files.append(f"./playsounds/053-footsteps5.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(54)" in message:
voice_files.append(f"./playsounds/054-footsteps6.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(55)" in message:
voice_files.append(f"./playsounds/055-footsteps7.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(56)" in message:
voice_files.append(f"./playsounds/056-footsteps7-stop.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(57)" in message:
voice_files.append(f"./playsounds/057-gasp.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(58)" in message:
voice_files.append(f"./playsounds/058-gulp1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(59)" in message:
voice_files.append(f"./playsounds/059-gulp2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(60)" in message:
voice_files.append(f"./playsounds/060-guncock1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(61)" in message:
voice_files.append(f"./playsounds/061-guncock2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(62)" in message:
voice_files.append(f"./playsounds/062-gunreload1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(63)" in message:
voice_files.append(f"./playsounds/063-gunreload2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(64)" in message:
voice_files.append(f"./playsounds/064-gunshot1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(65)" in message:
voice_files.append(f"./playsounds/065-gunshot2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(66)" in message:
voice_files.append(f"./playsounds/066-gunshot3.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(67)" in message:
voice_files.append(f"./playsounds/067-gunshot4.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(68)" in message:
voice_files.append(f"./playsounds/068-hang-drop.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(69)" in message:
voice_files.append(f"./playsounds/069-hang-swing.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(70)" in message:
voice_files.append(f"./playsounds/070-hit01.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(71)" in message:
voice_files.append(f"./playsounds/071-hit02.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(72)" in message:
voice_files.append(f"./playsounds/072-hit03.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(73)" in message:
voice_files.append(f"./playsounds/073-hit04.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(74)" in message:
voice_files.append(f"./playsounds/074-hit05.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(75)" in message:
voice_files.append(f"./playsounds/075-horse1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(76)" in message:
voice_files.append(f"./playsounds/076-knock-knock.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(77)" in message:
voice_files.append(f"./playsounds/077-lighter.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(78)" in message:
voice_files.append(f"./playsounds/078-machinegun.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(79)" in message:
voice_files.append(f"./playsounds/079-mobile-message.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(80)" in message:
voice_files.append(f"./playsounds/080-mobile-ring.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(81)" in message:
voice_files.append(f"./playsounds/081-mobile-tap.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(82)" in message:
voice_files.append(f"./playsounds/082-mud.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(83)" in message:
voice_files.append(f"./playsounds/083-mud.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(84)" in message:
voice_files.append(f"./playsounds/084-oldphone-ring.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(85)" in message:
voice_files.append(f"./playsounds/085-page-turn.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(86)" in message:
voice_files.append(f"./playsounds/086-phone-ringing.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(87)" in message:
voice_files.append(f"./playsounds/087-phone-vibrate.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(88)" in message:
voice_files.append(f"./playsounds/088-pill-bottle.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(89)" in message:
voice_files.append(f"./playsounds/089-police-siren.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(90)" in message:
voice_files.append(f"./playsounds/090-pop.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(91)" in message:
voice_files.append(f"./playsounds/091-sackdrop.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(92)" in message:
voice_files.append(f"./playsounds/092-scissors.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(93)" in message:
voice_files.append(f"./playsounds/093-scream1.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(94)" in message:
voice_files.append(f"./playsounds/094-scream2.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(95)" in message:
voice_files.append(f"./playsounds/095-silence-one-second.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(96)" in message:
voice_files.append(f"./playsounds/096-silence-two-seconds.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(97)" in message:
voice_files.append(f"./playsounds/097-slime.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(98)" in message:
voice_files.append(f"./playsounds/098-slurp.wav")
log.info(f"Added Playsound # {message}")
continue
elif "(99)" in message:
voice_files.append(f"./playsounds/099-splash1.wav")
log.info(f"Added Playsound # {message}")
continue

Stream overlay

A stream overlay for the TTS being processed, something small that the streamer can put (browser source running on a local server). Would help the cheerer confirm that their voice is actually working

Example (see the top left):
image

Alias breaks bot

Describe the bug
please note maybe I'm doing something wrong but taking the example of {'sonic': 'TM:z3mvtbcg4k4z'} crashes the bot. and trying to use my own alias results in the same issues {'sarah':'starlight-glimmer'}

Maybe I'm missing some syntax but I brought it straight from the example. however, the example seems confusing too and may need higher contrast on the text as well, as certain colored monitors will not display the text clearly. Looking at it, it is unclear what 'TM:z3mvtbcg4k4z' refers to, as there doesn't seem to be a voice under that?

convert bot to an asynchronous bot instead of blocking

i have a feeling this is why sometimes it will disconnect and not reconnect. also sometimes 1 thing goes wrong on the bot and the whole bot crashes requiring a restart, i feel the script being asynchronous will fix this.

logs in UI

image
Show the logs from bits or rewards with a button that allows the streamer to replay the donation or to remove/skip it

syntax without ||

I think it would be a good feature to make it work without having to add || between messages. I know nothing about regex or coding but I would make it stop when it sees a new voice text: or a sound (1).

I don't know if I should make another feature request for this other suggestions since they go in hand with this syntax feature but I would make it so if you make a mistake it would go back to the previous voice, for example:
drake: hello i am drake (1) spngbob: i am still drake
it would read it all with Drake's voice as "hello i am drake" (sound effect) "spngbob: i am still drake".
(even the spngbob part)
This way you stop the bot from stopping completely when a user sends a wrong voice id.

I would also add a default non ai voice (or a default ai voice / a way to pick a default ai voice) to read the first segment if it's wrong since the beginning, that way you can always get tts output even if the person sending the message is a pepega

For example: if the person forgets to add a starting voice or makes a spelling mistake on the first voice id, it would read it as Brian until it sees a valid voice id.

ZeroDivisionError: forsen

Sentry Issue: AI-TTS-DONATIONS-2

ZeroDivisionError: forsen
(4 additional frame(s) were not displayed)
...
  File "debugpy/../debugpy/server/cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "runpy.py", line 268, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "bot.py", line 77, in <module>
    raise ZeroDivisionError("forsen")

engineio.client - packet queue is empty, aborting

Every 30 seconds Engine.IO connection drops and then reconnects.

This is with StreamElements selected in the config.json

This does not happen with Channel_Points in the config.json


21:49:50 ERROR engineio.client - packet queue is empty, aborting client.py:663
INFO root - Engine.IO connection dropped client.py:718
INFO root - Connection failed, new attempt in 0.95 seconds client.py:652
21:49:51 INFO root - Engine.IO connection established client.py:681
INFO root - Namespace / is connected client.py:562
INFO root - Emitting event "authenticate" [/] client.py:395
INFO root - Reconnection successful client.py:669
INFO root - Received event "authenticated" [/] client.py:580
INFO root - StreamElements connected! bot.py:563

image

use tkinter to make a basic UI

Buttons for:

  • Skipping TTS

Sliders/Text fields for:

  • Minimum Bits Amount
  • Maximum Message Length

Text fields for:

  • Configuring the bot for the first time (all the secret keys in .env)

[SOL-10] testing client for viewers

makes it so that it just polls an external api (one made by me) so that the viewer doesn't need any credentials. barebones ai-tts-donations with only the testing interface

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update dependency @tsconfig/docusaurus to v2.0.2
  • chore(deps): update dependency @types/react-typist to v2.0.6
  • chore(deps): update dependency autoprefixer to v10.4.17
  • chore(deps): update dependency nodemon to v2.0.22
  • chore(deps): update dependency postcss to v8.4.33
  • chore(deps): update dependency pytest to v7.4.4
  • chore(deps): update nextjs monorepo to v13.5.6 (eslint-config-next, next)
  • chore(deps): update pnpm to v7.33.6
  • fix(deps): update dependency @next-auth/prisma-adapter to v1.0.7
  • fix(deps): update dependency node-fetch to v3.3.2
  • fix(deps): update dependency redis to v4.6.12
  • fix(deps): update docusaurus monorepo to v2.4.3 (@docusaurus/core, @docusaurus/module-type-aliases, @docusaurus/preset-classic, @docusaurus/types)
  • fix(deps): update mantine monorepo to v6.0.21 (@mantine/carousel, @mantine/core, @mantine/form, @mantine/hooks, @mantine/next, @mantine/notifications, @mantine/nprogress)
  • chore(deps): update dependency @prisma/nextjs-monorepo-workaround-plugin to v4.16.2
  • chore(deps): update dependency @types/node to v18.19.8
  • chore(deps): update dependency @types/node to v18.19.8
  • chore(deps): update dependency @types/node to v20.11.5
  • chore(deps): update dependency eslint to v8.56.0
  • chore(deps): update dependency google-cloud-storage to v2.14.0
  • chore(deps): update dependency prettier to v2.8.8
  • chore(deps): update dependency rich to v13.7.0
  • chore(deps): update dependency tailwindcss to v3.4.1
  • chore(deps): update dependency tslib to v2.6.2
  • chore(deps): update dependency typescript to v5.3.3
  • chore(deps): update dependency typescript to v5.3.3
  • chore(deps): update dependency vercel to v31.4.0
  • chore(deps): update dependency wheel to v0.42.0
  • fix(deps): update dependency @sentry/nextjs to v7.93.0
  • fix(deps): update dependency @tabler/icons-react to v2.46.0
  • fix(deps): update dependency @tanstack/react-query to v4.36.1
  • fix(deps): update dependency @vercel/analytics to v1.1.2
  • fix(deps): update dependency dotenv to v16.3.1
  • fix(deps): update dependency embla-carousel-autoplay to v7.1.0
  • fix(deps): update dependency embla-carousel-react to v7.1.0
  • fix(deps): update dependency fastify to v4.25.2
  • fix(deps): update dependency fastify-raw-body to v4.3.0
  • fix(deps): update dependency framer-motion to v10.18.0
  • fix(deps): update dependency next-intl to v2.22.1
  • fix(deps): update dependency pusher to v5.2.0
  • fix(deps): update dependency react-tsparticles to v2.12.2
  • fix(deps): update dependency superjson to v1.13.3
  • fix(deps): update dependency tabler-icons-react to v1.56.0
  • fix(deps): update dependency tsparticles to v2.12.0
  • fix(deps): update dependency turbo to v1.11.3
  • fix(deps): update dependency zod to v3.22.4
  • fix(deps): update emotion monorepo (@emotion/react, @emotion/server)
  • fix(deps): update trpc monorepo to v10.45.0 (@trpc/client, @trpc/next, @trpc/react-query, @trpc/server)
  • chore(deps): update dependency @prisma/nextjs-monorepo-workaround-plugin to v5
  • chore(deps): update dependency @types/node to v20
  • chore(deps): update dependency vercel to v33
  • chore(deps): update nextjs monorepo to v14 (major) (eslint-config-next, next)
  • fix(deps): update dependency @mdx-js/react to v3
  • fix(deps): update dependency @tanstack/react-query to v5
  • fix(deps): update dependency next-intl to v3
  • fix(deps): update dependency superjson to v2
  • fix(deps): update dependency tsparticles to v3
  • fix(deps): update docusaurus monorepo to v3 (major) (@docusaurus/core, @docusaurus/module-type-aliases, @docusaurus/preset-classic, @docusaurus/types)
  • fix(deps): update mantine monorepo to v7 (major) (@mantine/carousel, @mantine/core, @mantine/form, @mantine/hooks, @mantine/notifications, @mantine/nprogress)
  • ๐Ÿ” Create all rate-limited PRs at once ๐Ÿ”

Other Branches

These updates are pending. To force PRs open, click the checkbox below.

  • fix(deps): update dependency next-auth to v4.24.5 [security]

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

npm
apps/backend/package.json
  • dotenv ^16.0.3
  • fastify ^4.10
  • fastify-raw-body ^4.2.0
  • node-fetch ^3.2.10
  • @types/node ^18.11.9
  • nodemon ^2.0.20
  • tsconfig.json ^1.0.11
  • tslib ^2.4.1
  • typescript ^5.0.0
apps/docs/package.json
  • @docusaurus/core 2.4.1
  • @docusaurus/preset-classic 2.4.1
  • @mdx-js/react ^1.6.22
  • clsx ^1.2.1
  • prism-react-renderer ^1.3.5
  • react ^18.0.0
  • react-dom ^18.0.0
  • @docusaurus/module-type-aliases 2.4.1
  • @docusaurus/types ^2.2.0
  • @tsconfig/docusaurus ^2.0.0
  • typescript ^5.0.0
  • node >=18
apps/frontend/package.json
  • @emotion/react ^11.10.4
  • @emotion/server ^11.10.0
  • @mantine/carousel ^6.0.0
  • @mantine/core ^6.0.0
  • @mantine/form ^6.0.0
  • @mantine/hooks ^6.0.0
  • @mantine/next ^6.0.0
  • @mantine/notifications ^6.0.7
  • @mantine/nprogress ^6.0.0
  • @next-auth/prisma-adapter ^1.0.3
  • @sentry/nextjs ^7.16.0
  • @tabler/icons-react ^2.2.0
  • @tanstack/react-query ^4
  • @trpc/client ^10
  • @trpc/next ^10
  • @trpc/react-query ^10
  • @trpc/server ^10
  • @vercel/analytics ^1.0.0
  • embla-carousel-autoplay ^7.0.3
  • embla-carousel-react ^7.0.3
  • framer-motion ^10.0.0
  • next ^13.0.2
  • next-auth ^4.8.0
  • next-intl ^2.7.5
  • pusher ^5.1.1-beta
  • pusher-js ^7.6.0
  • react ^18.2.0
  • react-dom ^18.2.0
  • react-tsparticles ^2.1.3
  • redis ^4.6.7
  • superjson ^1.9.1
  • tabler-icons-react ^1.52.0
  • tsparticles ^2.1.3
  • zod ^3.17.3
  • @prisma/nextjs-monorepo-workaround-plugin ^4.12.0
  • @types/node 18.16.19
  • @types/react 18.2.14
  • @types/react-dom 18.2.6
  • @types/react-typist ^2.0.3
  • eslint 8.44.0
  • typescript 5.1.6
apps/processor/package.json
apps/rip-redirect/package.json
  • next ^13.5.3
  • react ^18.2.0
  • react-dom ^18.2.0
  • @types/node ^20.8.0
  • @types/react ^18.2.23
  • @types/react-dom ^18.2.8
  • autoprefixer ^10.4.16
  • eslint ^8.50.0
  • eslint-config-next ^13.5.3
  • postcss ^8.4.31
  • tailwindcss ^3.3.3
  • typescript ^5.2.2
package.json
  • envsafe ^2.0.3
  • turbo ^1.6.3
  • prettier ^2.7.1
  • vercel ^31.0.0
  • pnpm 7.33.3
packages/prisma/package.json
  • @types/node ^18.11.18
  • typescript 5.1.6
pip_requirements
apps/processor/requirements-dev.txt
  • pytest ==7.4.0
apps/processor/requirements.txt
  • functions-framework ==3.*
  • google-cloud-storage ==2.10.0
  • httpx == 1.0.0b0
  • pedalboard ==0.7.4
  • pusher ==3.3.2
  • pydub ==0.25.1
  • python_dotenv ==1.0.0
  • rich ==13.4.2
  • sentry-sdk ==1.26.0
  • wheel ==0.40.0

  • Check this box to trigger a request for Renovate to run again on this repository

Max sounds per request feature

To avoid donos like (1) || (2) || (3) || (4) || (5) || (6) || (7) || (8) || (9) || (10) || (11) || (12) || (13) || (14) || (15) || (16) ...

Self voice hosting

At the moment the project spins around being able to use the huge amount of uberduck.ai voices, but it would be really useful to be able to self host our own tacotron2 voices for a faster synthesis

KeyError: 'state'

Sentry Issue: AI-TTS-DONATIONS-1Q

KeyError: 'state'
  File "threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "bot.py", line 679, in test_tts
    request_tts(message=message, failed=False)
  File "bot.py", line 372, in request_tts
    check_tts_response: dict = tts_provider.check_tts(job_response["uuid"])
  File "~\ai-tts-donations\API\fakeyou.py", line 74, in check_tts
    if response.json()["state"]["status"] == "attempt_failed":

Some voices dont load in instantly?

I have a feeling this is an uberduck problem, but its still a big problem.

The only case I've seen this happen to is elpws (so far):
Windows 10 | Python 3.9.7

Mimic bit donation in console input

The streamer can type Cheer1 gaben: open cases and it would simulate a donation. Would be useful for testing and debugging and also incase the streamer restarts right as someone donates.

Add dev-dependencies

Remove stuff like pre-commit and pyupgrade from the regular requirements.txt, and add them in a seperate dev-dependencies file for people who want to develop on the app.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.