Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6f3ab8c
fix(say): Refactor !say and !tsay classes
Dolly132 Mar 4, 2026
cb4f5e7
some fix
Dolly132 Mar 4, 2026
ac7abaa
..
Dolly132 Mar 4, 2026
7fe2eb5
aa
Dolly132 Mar 4, 2026
baa9078
aa
Dolly132 Mar 4, 2026
2a95010
a
Dolly132 Mar 4, 2026
1c2ff58
aa
Dolly132 Mar 5, 2026
fd3e4ff
bruh
Dolly132 Mar 5, 2026
03e44dd
aa
Dolly132 Mar 5, 2026
8eb6a83
aa
Dolly132 Mar 5, 2026
1f2df14
Create deploy-image
Dolly132 Mar 5, 2026
587c6b1
a
Dolly132 Mar 5, 2026
2ff7011
update
Dolly132 Mar 7, 2026
5bf62a6
aa
Dolly132 Mar 7, 2026
5e82a92
modifiers per trigger play
Dolly132 Mar 8, 2026
8959e54
should be good
Dolly132 Mar 8, 2026
10d95d6
aa
Dolly132 Mar 8, 2026
bc24f42
adada
Dolly132 Mar 8, 2026
a64ce47
adada
Dolly132 Mar 8, 2026
2e6e23a
aaaaaaaaaaaaaaaaaaaaaaa
Dolly132 Mar 8, 2026
35faa07
aaa
Dolly132 Mar 8, 2026
1c947f5
adada
Dolly132 Mar 8, 2026
7683035
zczcz
Dolly132 Mar 8, 2026
beec06f
aadada
Dolly132 Mar 8, 2026
c78396a
yes
Dolly132 Mar 8, 2026
ee41728
feat(triggers): Add sound modifiers for voicetriggers
Dolly132 Mar 8, 2026
faaa2ac
fix linting and mypy issues
Dolly132 Mar 8, 2026
0a932a5
mypy...
Dolly132 Mar 8, 2026
f3a43dd
aa
Dolly132 Mar 8, 2026
cca84be
...
Dolly132 Mar 8, 2026
88aac77
Merge branch 'main-dolly18' into my-master
Dolly132 Mar 8, 2026
0c35c9b
Remove logging of audio modifiers
Dolly132 Mar 8, 2026
6fefbd3
should be good
Dolly132 Mar 8, 2026
128415a
Merge branch 'my-master' into main-dolly18
Dolly132 Mar 8, 2026
d9cc35a
Revert "Merge branch 'my-master' into main-dolly18"
Dolly132 Mar 8, 2026
c8d8bdf
...
Dolly132 Mar 8, 2026
7455b1b
resolving copilot review
Dolly132 Mar 8, 2026
3727fe1
a small fix
Dolly132 Mar 8, 2026
787bc6f
Bump version to 1.4.0
Rushaway Mar 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions config/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,29 @@
"Host": "127.0.0.1",
"Port": 27019,
"SampleRate": 22050,
"Volume": 1.0,
"Speed": 1.0,
"Pitch": 1.0,
"Proxy": ""
"Proxy": "",

"AudioParams":
{
"Volume":
{
"Default": 1.0,
"Min": 0.0,
"Max": 1.0
},
"Speed":
{
"Default": 1.0,
"Min": 0.5,
"Max": 2.0
},
"Pitch":
{
"Default": 1.0,
"Min": 0.5,
"Max": 2.0
}
}
Comment thread
Dolly132 marked this conversation as resolved.
},

"GeoIP":
Expand Down
39 changes: 39 additions & 0 deletions src/torchlight/AudioManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,45 @@ def __init__(self, torchlight: Torchlight) -> None:
def __del__(self) -> None:
self.logger.info("~AudioManager()")

def ParseParams(self, trigger_params: dict, msg: str) -> dict[str, float]:
this_config = self.torchlight.config.config.get("VoiceServer", {}).get("AudioParams", {})
if not this_config:
return trigger_params

Comment thread
Dolly132 marked this conversation as resolved.
params: dict[str, float] = {}
for param in this_config:
if param in trigger_params and trigger_params[param] is not None:
params[param] = float(trigger_params[param])
else:
if isinstance(this_config[param], dict) and "Default" in this_config[param]:
params[param] = float(this_config[param]["Default"])

msg_args = msg.split()
for arg in msg_args:
if "=" in arg:
key, value = arg.split("=", 1)
if not key or not value:
continue

key = key.capitalize()
if key not in this_config:
continue

if isinstance(this_config[key], dict):
val: float = 1.0
try:
val = float(value)
except ValueError:
continue

Comment thread
Dolly132 marked this conversation as resolved.
if "Min" not in this_config[key] or "Max" not in this_config[key]:
continue

val = max(this_config[key]["Min"], min(val, this_config[key]["Max"]))
params[key] = val

return params

def CheckLimits(self, player: Player) -> bool:
level = player.admin.level

Expand Down
23 changes: 18 additions & 5 deletions src/torchlight/Commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,17 @@ async def _func(self, message: list[str], player: Player) -> int:
return -1

voice_trigger = message[0].lower()
trigger_number = message[1].lower()
trigger_number: str = ""
if message[1]:
parts = message[1].split()
trigger_parts = []
for part in parts:
if "=" in part:
break
trigger_parts.append(part)

if trigger_parts:
trigger_number = " ".join(trigger_parts)

sound = self.get_sound_path(
player=player,
Expand All @@ -638,12 +648,15 @@ async def _func(self, message: list[str], player: Player) -> int:
self.torchlight.SayChat(f"Now playing {{olive}}{self.random_trigger_name}")
voice_trigger = self.random_trigger_name

self.torchlight.SetPlayerCooldown(player, self.torchlight.config["AntiSpam"]["ChatCooldown"])

params = cast(dict, self.trigger_manager.voice_triggers[voice_trigger]["parameters"])
volume = float(params["Volume"])
speed = float(params["Speed"])
pitch = float(params["Pitch"])
modifiers = self.audio_manager.ParseParams(params, message[1])

volume = modifiers["Volume"]
speed = modifiers["Speed"]
pitch = modifiers["Pitch"]

self.torchlight.SetPlayerCooldown(player, self.torchlight.config["AntiSpam"]["ChatCooldown"])
return audio_clip.Play(volume=volume, speed=speed, pitch=pitch)

def get_sound_path(self, player: Player, voice_trigger: str, trigger_number: str) -> str | None:
Expand Down
9 changes: 6 additions & 3 deletions src/torchlight/FFmpegAudioPlayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ def __init__(self, torchlight: Torchlight) -> None:
self.host = self.config["Host"]
self.port = self.config["Port"]
self.sample_rate = float(self.config["SampleRate"])
self.volume = float(self.config["Volume"])
self.speed = float(self.config["Speed"])
self.pitch = float(self.config["Pitch"])

params = self.config.get("AudioParams", {})

self.volume = float(params.get("Volume", {}).get("Default", 1.0))
self.speed = float(params.get("Speed", {}).get("Default", 1.0))
self.pitch = float(params.get("Pitch", {}).get("Default", 1.0))
self.proxy = self.config.get("Proxy", "")

self.started_playing: float | None = None
Expand Down
7 changes: 4 additions & 3 deletions src/torchlight/TriggerManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ def __init__(
def Load(self) -> None:
self.logger.info(f"Loading triggers from {self.config_filepath}")

voice_server_params = self.config.config.get("VoiceServer", {}).get("AudioParams", {})
with open(self.config_filepath) as fp:
default_parameters = {
"Volume": float(self.config.config.get("VoiceServer", {}).get("Volume", 1.0)),
"Speed": float(self.config.config.get("VoiceServer", {}).get("Speed", 1.0)),
"Pitch": float(self.config.config.get("VoiceServer", {}).get("Pitch", 1.0)),
"Volume": float(voice_server_params.get("Volume", {}).get("Default", 1.0)),
"Speed": float(voice_server_params.get("Speed", {}).get("Default", 1.0)),
"Pitch": float(voice_server_params.get("Pitch", {}).get("Default", 1.0)),
}

self.triggers_dict = json.load(fp, object_pairs_hook=OrderedDict)
Expand Down
2 changes: 1 addition & 1 deletion src/torchlight/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.3.2"
__version__ = "1.4.0"