mirror of
https://github.com/onyx-and-iris/obsws-cli.git
synced 2025-07-15 17:31:46 +00:00
add text command group
This commit is contained in:
parent
0c72a10fb7
commit
040a41daa7
@ -44,6 +44,8 @@ class RootTyperAliasGroup(typer.core.TyperGroup):
|
||||
cmd_name = 'stream'
|
||||
case 'sm':
|
||||
cmd_name = 'studiomode'
|
||||
case 't':
|
||||
cmd_name = 'text'
|
||||
case 'vc':
|
||||
cmd_name = 'virtualcam'
|
||||
return super().get_command(ctx, cmd_name)
|
||||
|
@ -28,6 +28,7 @@ for sub_typer in (
|
||||
'screenshot',
|
||||
'stream',
|
||||
'studiomode',
|
||||
'text',
|
||||
'virtualcam',
|
||||
):
|
||||
module = importlib.import_module(f'.{sub_typer}', package=__package__)
|
||||
|
78
obsws_cli/text.py
Normal file
78
obsws_cli/text.py
Normal file
@ -0,0 +1,78 @@
|
||||
"""module containing commands for manipulating text inputs."""
|
||||
|
||||
from typing import Annotated, Optional
|
||||
|
||||
import typer
|
||||
|
||||
from . import console, validate
|
||||
from .alias import SubTyperAliasGroup
|
||||
|
||||
app = typer.Typer(cls=SubTyperAliasGroup)
|
||||
|
||||
|
||||
@app.callback()
|
||||
def main():
|
||||
"""Control text inputs in OBS."""
|
||||
|
||||
|
||||
@app.command('current | get')
|
||||
def current(
|
||||
ctx: typer.Context,
|
||||
input_name: Annotated[str, typer.Argument(help='Name of the text input to get.')],
|
||||
):
|
||||
"""Get the current text for a text input."""
|
||||
if not validate.input_in_inputs(ctx, input_name):
|
||||
console.err.print(f'Input [yellow]{input_name}[/yellow] not found.')
|
||||
raise typer.Exit(1)
|
||||
|
||||
resp = ctx.obj['obsws'].get_input_settings(name=input_name)
|
||||
if not resp.input_kind.startswith('text_'):
|
||||
console.err.print(
|
||||
f'Input [yellow]{input_name}[/yellow] is not a text input.',
|
||||
)
|
||||
raise typer.Exit(1)
|
||||
|
||||
current_text = resp.input_settings.get('text', '')
|
||||
if not current_text:
|
||||
current_text = '(empty)'
|
||||
console.out.print(
|
||||
f'Current text for input {console.highlight(ctx, input_name)}: {current_text}',
|
||||
)
|
||||
|
||||
|
||||
@app.command('update | set')
|
||||
def update(
|
||||
ctx: typer.Context,
|
||||
input_name: Annotated[
|
||||
str, typer.Argument(help='Name of the text input to update.')
|
||||
],
|
||||
new_text: Annotated[
|
||||
Optional[str],
|
||||
typer.Argument(
|
||||
help='The new text to set for the input.',
|
||||
),
|
||||
] = None,
|
||||
):
|
||||
"""Update the text of a text input."""
|
||||
if not validate.input_in_inputs(ctx, input_name):
|
||||
console.err.print(f'Input [yellow]{input_name}[/yellow] not found.')
|
||||
raise typer.Exit(1)
|
||||
|
||||
resp = ctx.obj['obsws'].get_input_settings(name=input_name)
|
||||
if not resp.input_kind.startswith('text_'):
|
||||
console.err.print(
|
||||
f'Input [yellow]{input_name}[/yellow] is not a text input.',
|
||||
)
|
||||
raise typer.Exit(1)
|
||||
|
||||
ctx.obj['obsws'].set_input_settings(
|
||||
name=input_name,
|
||||
settings={'text': new_text},
|
||||
overlay=True,
|
||||
)
|
||||
|
||||
if not new_text:
|
||||
new_text = '(empty)'
|
||||
console.out.print(
|
||||
f'Text for input {console.highlight(ctx, input_name)} updated to: {new_text}',
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user