DiscordBuddy.psm1
# DiscordBuddy (minimal) - exactly two functions # Expects Annoyance.wav in the module root (same folder as this .psm1) $script:DiscordBuddyJob = $null function Start-DiscordBuddy { if ($script:DiscordBuddyJob) { return $script:DiscordBuddyJob } $wav = Join-Path $PSScriptRoot 'Annoyance.wav' if (-not (Test-Path -LiteralPath $wav)) { throw "Annoyance.wav not found. Place it in: $PSScriptRoot" } $loop = { param($wavPath) $p = [System.Media.SoundPlayer]::new($wavPath) try { while ($true) { $p.PlaySync() Start-Sleep -Seconds (Get-Random -Maximum 421) # 0..420 inclusive } } finally { $p.Dispose() } } if (Get-Command Start-ThreadJob -ErrorAction Ignore) { $script:DiscordBuddyJob = Start-ThreadJob -Name 'DiscordBuddy' -ScriptBlock $loop -ArgumentList $wav } else { $script:DiscordBuddyJob = Start-Job -Name 'DiscordBuddy' -ScriptBlock $loop -ArgumentList $wav } $script:DiscordBuddyJob } function Stop-DiscordBuddy { if (-not $script:DiscordBuddyJob) { return } try { Stop-Job $script:DiscordBuddyJob -ErrorAction SilentlyContinue } catch {} try { Remove-Job $script:DiscordBuddyJob -Force -ErrorAction SilentlyContinue } catch {} $script:DiscordBuddyJob = $null } Export-ModuleMember -Function Start-DiscordBuddy, Stop-DiscordBuddy |