Plugin-powered chat interaction powerhouse~
Find a file
2021-12-24 17:29:43 -07:00
chats Plugin + config overhaul 2021-12-17 06:01:25 -07:00
cli Accept external events, add CLI to make them 2021-12-24 17:27:36 -07:00
events Accept external events, add CLI to make them 2021-12-24 17:27:36 -07:00
plugins Automatically target "all" when non context available 2021-12-19 01:08:05 -07:00
server (maybe) fix ws bug 2021-12-24 17:29:43 -07:00
.gitignore Add secrets.kdl to gitignore (for my own sanity) 2021-12-19 00:03:30 -07:00
config.kdl Plugin + config overhaul 2021-12-17 06:01:25 -07:00
config.py Allow multiple of username or sources in Trigger 2021-12-19 00:10:45 -07:00
main.py Add subcommand-capible cli 2021-12-24 17:26:47 -07:00
Pipfile Add cue builtin 2021-12-19 01:07:45 -07:00
Pipfile.lock Add cue builtin 2021-12-19 01:07:45 -07:00
README.md More readme! 2021-12-17 07:26:24 -07:00

Open Vtuber Tool Kit - Audience Interaction module

This is the project that handles audience interaction within OVTK, but is designed to be very useful standalone and in co-ordination with non-OVTK tools.

It consists of three parts:

  1. Chat modules
  2. A websocket server
  3. A powerful, easy to use plugin system

Chat Modules

As OVTK is designed to be platform-agnostic, both in terms of the host OS and the streaming platform, the job of the chat modules is to fetch and normalize audience events (chats, donations, etc).

Each runs in its own process, and so can be written with little concern for the rest of the application to ease development requirements.

Websocket Server

The websocket server publishes all events to any external clients that may be interested - ex, other OVTK software.

Plugin system

As this system sits directly between the streamer and the streaming service (which sits between the audience), it is a very handy place to be able to place custom logic or bots!

The system is highly capable out-of-the-box, allowing you to write simple automation via a straightforward config syntax called KDL. For example, a bot that replies to raid events would look like:

trigger event="Raid" {
  reply "Thank you very much for the {event.user_count} raid, {event.from_channel}!"
}

And writing your own plugin to extend the abilities available to you (or to implement complex logic) is just as straightforward. Here's an example of a plugin that automatically changes "simp" to "shrimp" in every message (as seen by those consuming the websocket output):

from plugins import PluginBase

class Plugin(PluginBase):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def on_bus_event(self, event):
      event.text.replace('simp', 'shrimp')
      return event