Example #1
0
def fill_coop_entrant_lists(props, rtgg_obs: RacetimeObs):
    fill_entrant_list(rtgg_obs.race,
                      obs.obs_properties_get(props, "coop_partner"))
    fill_entrant_list(rtgg_obs.race,
                      obs.obs_properties_get(props, "coop_opponent1"))
    fill_entrant_list(rtgg_obs.race,
                      obs.obs_properties_get(props, "coop_opponent2"))
Example #2
0
def check_file_use(props, prop, settings):
    p = obs.obs_properties_get(props, "file_path")
    st = obs.obs_properties_get(props, "scripted_text")
    p2 = obs.obs_properties_get(props, "reload_file")
    obs.obs_property_set_visible(p, std.use_file)
    obs.obs_property_set_visible(p2, std.use_file)
    obs.obs_property_set_visible(st, not std.use_file)
    return True
def closing_scene_modified(props, properties, settings):
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "stop_streaming_delay"),
        closing_scene != "" and manage_streaming)
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "stop_recording_delay"),
        closing_scene != "" and manage_recording)
    return True
Example #4
0
def get_scenes(props, prop):
    if device_ip is not None and auth_key is not None:
        nl = Nanoleaf(device_ip, auth_key)
        s1 = obs.obs_properties_get(props, "scene_on")
        s2 = obs.obs_properties_get(props, "scene_off")
        for light_scene in nl.list_effects():
            obs.obs_property_list_add_string(s1, light_scene, light_scene)
            obs.obs_property_list_add_string(s2, light_scene, light_scene)
        return True
def on_property_modified(props, property, settings):
    obs.obs_property_set_enabled(obs.obs_properties_get(props, "start_scene"),
                                 manage_streaming or manage_recording)
    obs.obs_property_set_enabled(obs.obs_properties_get(props, "weekday"),
                                 (manage_streaming or manage_recording)
                                 and start_scene != "")
    obs.obs_property_set_enabled(obs.obs_properties_get(props, "event_start"),
                                 (manage_streaming or manage_recording)
                                 and start_scene != "")
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "preshow_duration"),
        (manage_streaming or manage_recording) and start_scene != "")
    obs.obs_property_set_enabled(obs.obs_properties_get(props, "text_source"),
                                 (manage_streaming or manage_recording)
                                 and start_scene != "")
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "countdown_final_text"),
        (manage_streaming or manage_recording) and text_source != ""
        and start_scene != "")

    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "closing_scene"), manage_streaming
        or manage_recording)
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "stop_streaming_delay"),
        closing_scene != "" and manage_streaming)
    obs.obs_property_set_enabled(
        obs.obs_properties_get(props, "stop_recording_delay"),
        closing_scene != "" and manage_recording)
    return True
Example #6
0
def script_qualifier_settings(props, rtgg_obs: RacetimeObs):
    lang = gettext.translation("racetime-obs",
                               localedir=os.environ['LOCALEDIR'])
    _ = lang.gettext

    p = obs.obs_properties_add_bool(
        props, "use_qualifier",
        _("Display race results as tournament qualifier?"))
    obs.obs_property_set_modified_callback(p, qualifier_toggled)
    qualifier_group = obs.obs_properties_create()
    obs.obs_properties_add_group(props, "qualifier_group", _("Qualifier Mode"),
                                 obs.OBS_GROUP_NORMAL, qualifier_group)
    obs.obs_property_set_visible(
        obs.obs_properties_get(props, "qualifier_group"),
        rtgg_obs.qualifier.enabled)
    p = obs.obs_properties_add_int_slider(qualifier_group, "qualifier_cutoff",
                                          _("Use Top X as par time, where X="),
                                          3, 10, 1)
    p = obs.obs_properties_add_list(qualifier_group, "qualifier_par_source",
                                    _("Qualifier Par Time Source"),
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)
    fill_source_list(p)
    p = obs.obs_properties_add_list(qualifier_group, "qualifier_score_source",
                                    _("Qualifier Score Source"),
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)
    fill_source_list(p)
Example #7
0
 def _update(properties, prop, data=None):
     if not data:
         return
     n1 = _obs.obs_property_name(prop)
     n2 = f"_{n1}_item"
     p = _obs.obs_properties_get(properties, n2)
     return SceneItemList._do_update(data, p, n1, n2)
Example #8
0
def name_modified(props, prop, *args, **kwargs):
    racer_name = obs.obs_data_get_string(args[0], lp.ladder_name)
    p = obs.obs_properties_get(props, lp.ladder_name)
    if ladder_timer.update_settings(racer_name):
        obs.obs_property_set_description(p, _("Ladder Name ✅"))
    else:
        obs.obs_property_set_description(p, _("Ladder Name ❌"))
    return True
Example #9
0
def populate_channels(props, p=None, _settings=None):
    p = obs.obs_properties_get(props, 'voice_channel')
    obs.obs_property_list_clear(p)
    for guild in sorted(client.guilds, key=lambda x: x.name.lower()):
        for channel in sorted(guild.channels, key=lambda x: x.position):
            if isinstance(channel, discord.VoiceChannel):
                obs.obs_property_list_add_string(
                    p, guild.name + ' -> ' + channel.name, str(channel.id))
    return True
Example #10
0
def find_nanoleafs(props, prop):
    nanoleaf_dict = discovery.discover_devices(timeout=10)
    print(nanoleaf_dict)
    l = obs.obs_properties_get(props, "device_ip")
    for device in nanoleaf_dict:
        obs.obs_property_list_add_string(l, nanoleaf_dict[device],
                                         nanoleaf_dict[device])

    return True
def callback(props, prop, settings):
    _number = obs.obs_data_get_int(settings, "_int")
    _text_value = obs.obs_data_get_string(settings, "_text")
    text_property = obs.obs_properties_get(props, "_text")
    if _number > 50:
        eg.data = _text_value + str(_number)
        obs.obs_property_set_visible(text_property, True)
        return True
    else:
        eg.data = ""
        obs.obs_property_set_visible(text_property, False)
        return True
Example #12
0
def show_tooltip(props, prop, settings):
    p = obs.obs_properties_get(props, "text_effect")
    docs = getattr(std, std.effect + "_effect", "default")
    if docs == "default":
        selection = "[error]: there is no such effect".upper()
        color = "red"
    else:
        selection = docs.__doc__
        color = "green"
    styled_docs = f'<h1 style="color:{color};">{selection}</h1>'
    obs.obs_property_set_long_description(p, styled_docs)
    return True
def event_start_list_modified(props, property, settings):
    event_start_list = obs.obs_properties_get(props, "preshow_duration")
    obs.obs_property_list_clear(event_start_list)
    for i in range(0, 4):
        seconds = i * 60 * 5
        obs.obs_property_list_add_int(
            event_start_list,
            time(hour=math.floor((event_start - seconds) / 60 / 60),
                 minute=int(
                     (event_start - seconds) / 60 % 60)).strftime("%I:%M %p"),
            seconds)
    return True
def is_user_config(props, prop, data):
    if data:
        config = obs.obs_data_get_json(data)
        configjson = json.loads(config)
        del (config)

        isUserConfig = 'use_user_config' in configjson.keys(
        ) and configjson['use_user_config']

        for a_prop in ('score_names', 'score_count', 'font', 'fgcolor',
                       'bgcolor'):
            thisprop = obs.obs_properties_get(props, a_prop)
            obs.obs_property_set_visible(thisprop, not isUserConfig)
            del (thisprop)
        config_path_property = obs.obs_properties_get(props, 'user_config')
        obs.obs_property_set_visible(config_path_property, isUserConfig)
        del (config_path_property)

        if isUserConfig:
            global settings
            settings = data

    return True
Example #15
0
def populate_sources(props, p=None, _settings=None):
    p = obs.obs_properties_get(props, 'discord_source')
    obs.obs_property_list_clear(p)
    obs.obs_property_list_add_string(p, '(none)', '')
    sources = obs.obs_enum_sources()
    labels = {}
    for src in sources:
        n = obs.obs_source_get_name(src)
        labels[n] = n + ' (' + obs.obs_source_get_display_name(
            obs.obs_source_get_id(src)) + ')'
    obs.source_list_release(sources)
    for n in sorted(labels, key=lambda x: x.lower()):
        obs.obs_property_list_add_string(p, labels[n], n)
    return True
Example #16
0
def authorize_device(props, prop):
    global generated_auth_token
    nl = Nanoleaf(device_ip)
    if nl.generate_auth_token():
        generated_auth_key = nl.auth_token
        s = obs.obs_properties_get(props, "auth_key")
        obs.obs_property_list_add_string(s, generated_auth_key,
                                         generated_auth_key)

        return True
    print('[OBS-Nanoleaf]: Unable to acquire Authorization!')
    print(
        '[OBS-Nanoleaf]: Please make sure to Hold the on-off button down for 5-7 seconds until the LED starts flashing in a pattern'
    )
Example #17
0
def script_coop_settings(props, rtgg_obs: RacetimeObs):
    lang = gettext.translation("racetime-obs",
                               localedir=os.environ['LOCALEDIR'])
    _ = lang.gettext

    p = obs.obs_properties_add_bool(props, "use_coop",
                                    _("Display coop information?"))
    obs.obs_property_set_modified_callback(p, coop_toggled)
    coop_group = obs.obs_properties_create()
    obs.obs_properties_add_group(props, "coop_group", _("Co-op Mode"),
                                 obs.OBS_GROUP_NORMAL, coop_group)
    obs.obs_property_set_visible(obs.obs_properties_get(props, "coop_group"),
                                 rtgg_obs.coop.enabled)
    p = obs.obs_properties_add_list(coop_group, "coop_partner",
                                    _("Co-op Partner"),
                                    obs.OBS_COMBO_TYPE_LIST,
                                    obs.OBS_COMBO_FORMAT_STRING)
    p = obs.obs_properties_add_list(coop_group, "coop_opponent1",
                                    _("Co-op Rival 1"),
                                    obs.OBS_COMBO_TYPE_LIST,
                                    obs.OBS_COMBO_FORMAT_STRING)
    p = obs.obs_properties_add_list(coop_group, "coop_opponent2",
                                    _("Co-op Rival 2"),
                                    obs.OBS_COMBO_TYPE_LIST,
                                    obs.OBS_COMBO_FORMAT_STRING)
    fill_coop_entrant_lists(props, rtgg_obs)
    p = obs.obs_properties_add_list(coop_group, "coop_our_source",
                                    _("Our Team's Timer"),
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)
    obs.obs_property_set_long_description(p, (
        _("This text source will display your team's timer when you finish.")))
    fill_source_list(p)
    p = obs.obs_properties_add_list(coop_group, "coop_opponent_source",
                                    "Rival Team's Timer",
                                    obs.OBS_COMBO_TYPE_EDITABLE,
                                    obs.OBS_COMBO_FORMAT_STRING)
    obs.obs_property_set_long_description(
        p,
        (_("This text source will be use to display your rival's timer when "
           "they finish")))
    obs.obs_properties_add_color(coop_group, "coop_winner_color",
                                 _("Winner Color:"))
    obs.obs_properties_add_color(coop_group, "coop_loser_color",
                                 _("Loser Color:"))
    obs.obs_properties_add_color(coop_group, "coop_undetermined_color",
                                 _("Winner Undetermined Color"))
    fill_source_list(p)
Example #18
0
def b_stop(props, prop, *arg, **kwargs):
    p = obs.obs_properties_get(props, "b1")
    obs.obs_property_set_description(p, "Start")
    obs.obs_property_set_modified_callback(p, b_start) 
    
    visible_prop(props, "wf", True)
    visible_prop(props, "rf", True)
    visible_prop(props, "cb", True)
    visible_prop(props, "df", True)
    visible_prop(props, "af", True)
    visible_prop(props, "al", True)
    
    global run 
    run = False
    
    return True
Example #19
0
def b_start(props, prop, *arg, **kwargs):
    p = obs.obs_properties_get(props, "b1")
    obs.obs_property_set_description(p, "Stop")
    obs.obs_property_set_modified_callback(p, b_stop) 
    
    visible_prop(props, "wf", False)
    visible_prop(props, "rf", False)
    visible_prop(props, "cb", False)
    visible_prop(props, "df", False)
    visible_prop(props, "af", False)
    visible_prop(props, "al", False)

    global run
    run = True
    t = threading.Thread(target=busy_thread)
    t.start()
    return True
Example #20
0
def refresh_pressed(props, prop, *args, **kwargs):
    fill_source_list(obs.obs_properties_get(props, "source"))
    fill_source_list(obs.obs_properties_get(props, "coop_our_source"))
    fill_source_list(obs.obs_properties_get(props, "coop_opponent_source"))
    fill_source_list(obs.obs_properties_get(props, "qualifier_par_source"))
    fill_source_list(obs.obs_properties_get(props, "qualifier_score_source"))
    fill_race_list(rtgg_obs, obs.obs_properties_get(props, "race"),
                   obs.obs_properties_get(props, "category_filter"))
    coop_scripting.fill_coop_entrant_lists(props, rtgg_obs)
    if rtgg_obs.race is not None:
        rtgg_obs.coop.update_coop_text(rtgg_obs.race, rtgg_obs.full_name)
        update_coop_sources()
        rtgg_obs.qualifier.update_qualifier_text(rtgg_obs.race,
                                                 rtgg_obs.full_name)
        rtgg_obs.media_player.race_updated(rtgg_obs.race, rtgg_obs.full_name)
    return True
Example #21
0
def script_media_player_settings(props, rtgg_obs: RacetimeObs,
                                 media_player_toggled):
    lang = gettext.translation("racetime-obs",
                               localedir=os.environ['LOCALEDIR'])
    _ = lang.gettext

    p = obs.obs_properties_add_bool(props, "use_media_player",
                                    _("Enable sounds?"))
    obs.obs_property_set_modified_callback(p, media_player_toggled)
    media_player_group = obs.obs_properties_create()
    obs.obs_properties_add_group(props, "media_player_group",
                                 _("Media Player Mode"), obs.OBS_GROUP_NORMAL,
                                 media_player_group)
    obs.obs_property_set_visible(
        obs.obs_properties_get(props, "media_player_group"),
        rtgg_obs.media_player.enabled)
    monitoring_list = obs.obs_properties_add_list(media_player_group,
                                                  "monitoring_type",
                                                  _("Monitoring Type"),
                                                  obs.OBS_COMBO_TYPE_LIST,
                                                  obs.OBS_COMBO_FORMAT_INT)
    obs.obs_property_list_add_int(monitoring_list, _("Listen Only"),
                                  obs.OBS_MONITORING_TYPE_MONITOR_ONLY)
    obs.obs_property_list_add_int(monitoring_list, _("Stream Only"),
                                  obs.OBS_MONITORING_TYPE_NONE)
    obs.obs_property_list_add_int(monitoring_list, _("Listen and Stream"),
                                  obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT)
    p = obs.obs_properties_add_bool(media_player_group, "use_chat_pings",
                                    _("Chat Pings"))
    obs.obs_property_set_long_description(
        p,
        _("Enable this and set choose a sound file to play when a bot posts"
          " or when someone @s you in racetime.gg chat"))
    p = obs.obs_properties_add_path(media_player_group, "chat_ping_sound",
                                    _("Chat media file"), obs.OBS_PATH_FILE,
                                    "Audio Files (*.mp3 *.aac *.wav *.wma)",
                                    None)
    obs.obs_properties_add_path(media_player_group, "first_place_sound",
                                _("First Place Sound"), obs.OBS_PATH_FILE,
                                "Audio Files (*.mp3 *.aac *.wav *.wma)", None)
    obs.obs_property_set_long_description(
        p, _("Sound file to play when you finish first."))
Example #22
0
def populate_participants(props, p=None, _settings=None):
    if not client.channel:
        return False
    values = []
    for nick, name, disc, uid in (
        (x.nick, x.name, x.discriminator, x.id)
            for x in sorted(client.channel.guild.members,
                            key=lambda x: x.display_name.lower() + '!')
            if x != client.user):
        label = (nick or name) + ' ('
        if nick:
            label += name + ' '
        label += f'#{disc})'
        values.append((label, uid))
    for name in ['myself'] + [f'participant{i}' for i in range(SLOTS)]:
        p = obs.obs_properties_get(props, name)
        obs.obs_property_list_clear(p)
        obs.obs_property_list_add_string(p, '(none)', '')
        for label, uid in values:
            obs.obs_property_list_add_string(p, label, str(uid))
    return True
Example #23
0
def script_timer_settings(props, rtgg_obs: RacetimeObs):
    lang = gettext.translation("racetime-obs",
                               localedir=os.environ['LOCALEDIR'])
    _ = lang.gettext

    p = obs.obs_properties_add_bool(props, "use_podium",
                                    _("Use custom color for podium finishes?"))
    obs.obs_property_set_modified_callback(p, podium_toggled)
    podium_group = obs.obs_properties_create()
    obs.obs_properties_add_group(props, "podium_group", _("Podium Colors"),
                                 obs.OBS_GROUP_NORMAL, podium_group)
    obs.obs_property_set_visible(obs.obs_properties_get(props, "podium_group"),
                                 rtgg_obs.timer.use_podium_colors)
    obs.obs_properties_add_color(podium_group, "pre_color", _("Pre-race:"))
    obs.obs_properties_add_color(podium_group, "racing_color",
                                 _("Still racing:"))
    obs.obs_properties_add_color(podium_group, "first_color", _("1st place:"))
    obs.obs_properties_add_color(podium_group, "second_color", _("2nd place:"))
    obs.obs_properties_add_color(podium_group, "third_color", _("3rd place:"))
    obs.obs_properties_add_color(podium_group, "finished_color",
                                 _("After podium:"))
Example #24
0
def prop_modified(props, prop, settings):
    # print('prop_modified ', obs.obs_property_name(prop))

    status = 'Invalid Path' if not SERVER_ROOT else 'Invalid Port' if PORT == WS_PORT else 'OK'

    obs.obs_data_set_string(
        settings, 'info', '''Server Root:
%s

Page URL:
http://127.0.0.1:%d

Status:
%s
''' % (SERVER_ROOT or '<empty>', PORT, status))

    level_p = obs.obs_properties_get(props, 'root_level')

    obs.obs_property_int_set_limits(level_p, 1, total_levels(LIVE2D_FULL_PATH),
                                    1)

    return True
Example #25
0
def media_trigger_settings(props, rtgg_obs: RacetimeObs, index: int):
    lang = gettext.translation("racetime-obs",
                               localedir=os.environ['LOCALEDIR'])
    _ = lang.gettext

    media_player_group = obs.obs_properties_create()
    name = f"media_trigger_#{index}"
    obs.obs_properties_add_group(props, name,
                                 _("Media Trigger #") + f"{index}",
                                 obs.OBS_GROUP_NORMAL, media_player_group)
    obs.obs_property_set_visible(
        obs.obs_properties_get(props, "media_player_group"),
        rtgg_obs.media_player.enabled)
    obs.obs_properties_add_path(media_player_group, f"media_path_#{index}",
                                _("Sound File"), obs.OBS_PATH_FILE,
                                "Audio Files (*.mp3 *.aac *.wav *.wma)", None)
    p = obs.obs_properties_add_list(media_player_group,
                                    f"trigger_type_#{index}",
                                    _("Type of Trigger"),
                                    obs.OBS_COMBO_TYPE_LIST,
                                    obs.OBS_COMBO_FORMAT_STRING)
    obs.obs_property_list_add_string(p, "", "")
    obs.obs_property_list_add_string(p, _("Chat"), "chat")
    obs.obs_property_list_add_string(p, _("Finish Place"), "finish")
    obs.obs_property_list_add_string(p, _("Timer"), "time")
    obs.obs_property_set_modified_callback(p, media_type_changed)
    p = obs.obs_properties_add_list(media_player_group,
                                    f"monitoring_type_#{index}",
                                    _("Monitoring Type"),
                                    obs.OBS_COMBO_TYPE_LIST,
                                    obs.OBS_COMBO_FORMAT_INT)
    obs.obs_property_list_add_int(p, _("Only Listen"),
                                  obs.OBS_MONITORING_TYPE_MONITOR_ONLY)
    obs.obs_property_list_add_int(p, _("Only Stream"),
                                  obs.OBS_MONITORING_TYPE_NONE)
    obs.obs_property_list_add_int(p, _("Listen and Stream"),
                                  obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT)
def callback(props, prop, *args, **kwargs):  # pass settings implicitly
    p = obs.obs_properties_get(props, "button")
    n = next(counter)
    obs.obs_property_set_description(p, f"refresh pressed {n} times")
    return True
Example #27
0
def coop_toggled(props, prop, settings):
    vis = obs.obs_data_get_bool(settings, "use_coop")
    obs.obs_property_set_visible(obs.obs_properties_get(props, "coop_group"),
                                 vis)
    return True
Example #28
0
def qualifier_toggled(props, prop, settings):
    vis = obs.obs_data_get_bool(settings, "use_qualifier")
    obs.obs_property_set_visible(
        obs.obs_properties_get(props, "qualifier_group"), vis)
    return True
Example #29
0
def podium_toggled(props, prop, settings):
    vis = obs.obs_data_get_bool(settings, "use_podium")
    obs.obs_property_set_visible(obs.obs_properties_get(props, "podium_group"),
                                 vis)
    return True
Example #30
0
def visible_prop(props, a, b):
    x = obs.obs_properties_get(props, a)
    obs.obs_property_set_enabled(x, b)