Plugin-powered chat interaction powerhouse~
Find a file
2022-03-26 04:02:09 -04:00
chats [Twitch] Drop undeletable messages 2022-03-25 20:51:57 -04:00
cli [Plugins] Basic midi and websocket output plugins! 2022-03-26 03:58:56 -04:00
core [Core] Warn about unknown directives in config 2022-03-26 04:02:09 -04:00
events [Misskey] Add support for attachments 2022-02-04 18:31:48 -07:00
plugins [Plugins] Basic midi and websocket output plugins! 2022-03-26 03:58:56 -04:00
utils [Plugins] Basic midi and websocket output plugins! 2022-03-26 03:58:56 -04:00
.gitignore Ignore logs (if ya keep em) 2022-01-26 18:43:39 -07:00
config.kdl [Core] Allow config splitting! 2022-03-26 00:26:10 -04:00
main.py Even MORE logging improvements - colors, line numbers, and time! 2021-12-29 03:33:21 -07:00
Pipfile [Plugins] Basic midi and websocket output plugins! 2022-03-26 03:58:56 -04:00
Pipfile.lock [Plugins] Basic midi and websocket output plugins! 2022-03-26 03:58:56 -04:00
README.md Normalize arg handling across command and trigger 2021-12-29 01:55:41 -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 (arg)"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
from events import Message

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

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