Functions/GenXdev.Queries.Websites/Open-YabAIBattle.ps1
############################################################################### <# .SYNOPSIS Opens the YabAI Battle game in a web browser. .DESCRIPTION This function launches the YabAI Battle game in a web browser with extensive customization options for window placement, browser selection, and display mode. It provides a wrapper around the GenXdev.Webbrowser\Open-Webbrowser function with game-specific URL construction and parameter handling. The function supports two game modes: - Battle mode: Start a new AI vs AI battle - Spectate mode: Watch existing AI battles Browser positioning options include left, right, top, bottom, centered, and fullscreen modes with multi-monitor support. The function automatically handles application mode settings and browser extension management for optimal gaming experience. .PARAMETER Language The language of the game interface. Supports multiple languages including English, Spanish, French, German, and many others. This parameter affects the browser's Accept-Language header. .PARAMETER SpectateOnly Don't start a new game, just watch the AI play. This mode allows you to observe ongoing AI battles without starting a new game session. .PARAMETER Private Opens in incognito/private browsing mode. Uses InPrivate for Edge and incognito for Chrome. .PARAMETER Force Force enable debugging port, stopping existing browsers if needed. Useful when browser debugging features are required. .PARAMETER Edge Opens in Microsoft Edge browser. .PARAMETER Chrome Opens in Google Chrome browser. .PARAMETER Chromium Opens in Microsoft Edge or Google Chrome, depending on what the default browser is. .PARAMETER Firefox Opens in Firefox browser. .PARAMETER All Opens in all registered modern browsers. .PARAMETER Monitor The monitor to use, 0 = default, -1 is discard, -2 = Configured secondary monitor, defaults to -1, no positioning. .PARAMETER FullScreen Opens in fullscreen mode. .PARAMETER Width The initial width of the webbrowser window. .PARAMETER Height The initial height of the webbrowser window. .PARAMETER X The initial X position of the webbrowser window. .PARAMETER Y The initial Y position of the webbrowser window. .PARAMETER Left Place browser window on the left side of the screen. .PARAMETER Right Place browser window on the right side of the screen. .PARAMETER Top Place browser window on the top side of the screen. .PARAMETER Bottom Place browser window on the bottom side of the screen. .PARAMETER Centered Place browser window in the center of the screen. .PARAMETER ApplicationMode Hide the browser controls. .PARAMETER NoBrowserExtensions Prevent loading of browser extensions. .PARAMETER DisablePopupBlocker Disable the popup blocker. .PARAMETER AcceptLang Set the browser accept-lang http header. .PARAMETER KeysToSend Keystrokes to send to the Browser window, see documentation for cmdlet GenXdev.Windows\Send-Key. .PARAMETER SendKeyEscape Escape control characters when sending keys. .PARAMETER SendKeyHoldKeyboardFocus Prevent returning keyboard focus to PowerShell after sending keys. .PARAMETER SendKeyUseShiftEnter Send Shift+Enter instead of regular Enter for line breaks. .PARAMETER SendKeyDelayMilliSeconds Delay between sending different key sequences in milliseconds. .PARAMETER FocusWindow Focus the browser window after opening. .PARAMETER SetForeground Set the browser window to foreground after opening. .PARAMETER Maximize Maximize the window after positioning. .PARAMETER RestoreFocus Restore PowerShell window focus. .PARAMETER NewWindow Don't re-use existing browser window, instead, create a new one. .PARAMETER PassThru Returns a [System.Diagnostics.Process] object of the browserprocess. .PARAMETER ReturnURL Don't open webbrowser, just return the url. .PARAMETER ReturnOnlyURL After opening webbrowser, return the url. .PARAMETER NoFullScreen Don't open in fullscreen mode. .PARAMETER NoApplicationMode Do show the browser controls. .PARAMETER NoBorders Removes the borders of the browser window. .PARAMETER SideBySide Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor. .PARAMETER SessionOnly Use alternative settings stored in session for AI preferences. .PARAMETER ClearSession Clear alternative settings stored in session for AI preferences. .PARAMETER SkipSession Store settings only in persistent preferences without affecting session. .EXAMPLE Open-YabAIBattle -Edge -Private -NoFullScreen Opens the YabAI Battle game in Microsoft Edge using private browsing mode without fullscreen. .EXAMPLE yabbattle -e -incognito -nfs Opens the game using aliases for Edge, incognito mode, and no fullscreen. .EXAMPLE Open-YabAIBattle -SpectateOnly -Chrome Opens the game in spectate mode using Google Chrome to watch AI battles. .EXAMPLE Open-YabAIBattle -Language "Spanish" -Monitor 1 -Left Opens the game with Spanish language interface positioned on the left side of monitor 1. #> ############################################################################### function Open-YabAIBattle { [CmdletBinding()] [Alias('yabbattle')] param( ############################################################################### [ValidateSet( 'Afrikaans', 'Akan', 'Albanian', 'Amharic', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bemba', 'Bengali', 'Bihari', 'Bork, bork, bork!', 'Bosnian', 'Breton', 'Bulgarian', 'Cambodian', 'Catalan', 'Cherokee', 'Chichewa', 'Chinese (Simplified)', 'Chinese (Traditional)', 'Corsican', 'Croatian', 'Czech', 'Danish', 'Dutch', 'Elmer Fudd', 'English', 'Esperanto', 'Estonian', 'Ewe', 'Faroese', 'Filipino', 'Finnish', 'French', 'Frisian', 'Ga', 'Galician', 'Georgian', 'German', 'Greek', 'Guarani', 'Gujarati', 'Hacker', 'Haitian Creole', 'Hausa', 'Hawaiian', 'Hebrew', 'Hindi', 'Hungarian', 'Icelandic', 'Igbo', 'Indonesian', 'Interlingua', 'Irish', 'Italian', 'Japanese', 'Javanese', 'Kannada', 'Kazakh', 'Kinyarwanda', 'Kirundi', 'Klingon', 'Kongo', 'Korean', 'Krio (Sierra Leone)', 'Kurdish', 'Kurdish (Soranî)', 'Kyrgyz', 'Laothian', 'Latin', 'Latvian', 'Lingala', 'Lithuanian', 'Lozi', 'Luganda', 'Luo', 'Macedonian', 'Malagasy', 'Malay', 'Malayalam', 'Maltese', 'Maori', 'Marathi', 'Mauritian Creole', 'Moldavian', 'Mongolian', 'Montenegrin', 'Nepali', 'Nigerian Pidgin', 'Northern Sotho', 'Norwegian', 'Norwegian (Nynorsk)', 'Occitan', 'Oriya', 'Oromo', 'Pashto', 'Persian', 'Pirate', 'Polish', 'Portuguese (Brazil)', 'Portuguese (Portugal)', 'Punjabi', 'Quechua', 'Romanian', 'Romansh', 'Runyakitara', 'Russian', 'Scots Gaelic', 'Serbian', 'Serbo-Croatian', 'Sesotho', 'Setswana', 'Seychellois Creole', 'Shona', 'Sindhi', 'Sinhalese', 'Slovak', 'Slovenian', 'Somali', 'Spanish', 'Spanish (Latin American)', 'Sundanese', 'Swahili', 'Swedish', 'Tajik', 'Tamil', 'Tatar', 'Telugu', 'Thai', 'Tigrinya', 'Tonga', 'Tshiluba', 'Tumbuka', 'Turkish', 'Turkmen', 'Twi', 'Uighur', 'Ukrainian', 'Urdu', 'Uzbek', 'Vietnamese', 'Welsh', 'Wolof', 'Xhosa', 'Yiddish', 'Yoruba', 'Zulu')] [parameter( Mandatory = $false, Position = 0, HelpMessage = 'The language of the game interface' )] [string] $Language, ############################################################################### [parameter( Mandatory = $false, HelpMessage = "Don't start a new game, just watch the AI play" )] [switch] $SpectateOnly, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Opens in incognito/private browsing mode' )] [Alias('incognito', 'inprivate')] [switch] $Private, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Force enable debugging port, stopping existing ' + 'browsers if needed') )] [switch] $Force, ############################################################################### [Alias('e')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Microsoft Edge' )] [switch] $Edge, ############################################################################### [Alias('ch')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Google Chrome' )] [switch] $Chrome, ############################################################################### [Alias('c')] [Parameter( Mandatory = $false, HelpMessage = ('Opens in Microsoft Edge or Google Chrome, ' + 'depending on what the default browser is') )] [switch] $Chromium, ############################################################################### [Alias('ff')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Firefox' )] [switch] $Firefox, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Opens in all registered modern browsers' )] [switch] $All, ############################################################################### [Alias('m', 'mon')] [Parameter( Mandatory = $false, HelpMessage = ('The monitor to use, 0 = default, -1 is discard, ' + '-2 = Configured secondary monitor, defaults to ' + "`$Global:DefaultSecondaryMonitor or 2 if not found") )] [int] $Monitor = -2, ############################################################################### [Alias('sw')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in fullscreen mode' )] [switch] $ShowWindow, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The initial width of the webbrowser window' )] [int] $Width = -1, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The initial height of the webbrowser window' )] [int] $Height = -1, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The initial X position of the webbrowser window' )] [int] $X = -999999, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The initial Y position of the webbrowser window' )] [int] $Y = -999999, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the left side of the screen' )] [switch] $Left, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the right side of the screen' )] [switch] $Right, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the top side of the screen' )] [switch] $Top, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the bottom side of the screen' )] [switch] $Bottom, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Place browser window in the center of the screen' )] [switch] $Centered, ############################################################################### [Alias('a', 'app', 'appmode')] [Parameter( Mandatory = $false, HelpMessage = 'Hide the browser controls' )] [switch] $ApplicationMode, ############################################################################### [Alias('de', 'ne', 'NoExtensions')] [Parameter( Mandatory = $false, HelpMessage = 'Prevent loading of browser extensions' )] [switch] $NoBrowserExtensions, ############################################################################### [Alias('allowpopups')] [Parameter( Mandatory = $false, HelpMessage = 'Disable the popup blocker' )] [switch] $DisablePopupBlocker, ############################################################################### [Alias('lang', 'locale')] [Parameter( Mandatory = $false, HelpMessage = 'Set the browser accept-lang http header' )] [string] $AcceptLang, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Keystrokes to send to the Browser window, ' + 'see documentation for cmdlet GenXdev.Windows\Send-Key') )] [string[]] $KeysToSend, ############################################################################### [Alias('Escape')] [Parameter( Mandatory = $false, HelpMessage = 'Escape control characters when sending keys.' )] [switch] $SendKeyEscape, ############################################################################### [Alias('HoldKeyboardFocus')] [Parameter( Mandatory = $false, HelpMessage = 'Prevent returning keyboard focus to PowerShell after sending keys.' )] [switch] $SendKeyHoldKeyboardFocus, ############################################################################### [Alias('UseShiftEnter')] [Parameter( Mandatory = $false, HelpMessage = 'Send Shift+Enter instead of regular Enter for line breaks when sending keys.' )] [switch] $SendKeyUseShiftEnter, ############################################################################### [Alias('DelayMilliSeconds')] [Parameter( Mandatory = $false, HelpMessage = 'Delay in milliseconds between sending each key.' )] [int] $SendKeyDelayMilliSeconds, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Focus the browser window after opening' )] [Alias('fw','focus')] [switch] $FocusWindow, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Set the browser window to foreground after opening' )] [Alias('fg')] [switch] $SetForeground, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Maximize the window after positioning' )] [switch] $Maximize, ############################################################################### ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Restore focus to the previous window after opening the browser.' )] [Alias('rf', 'bg')] [switch] $RestoreFocus, ############################################################################### [Alias('nw', 'new')] [Parameter( Mandatory = $false, HelpMessage = ("Don't re-use existing browser window, instead, " + 'create a new one') )] [switch] $NewWindow, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Returns a [System.Diagnostics.Process] object of ' + 'the browserprocess') )] [Alias('pt')] [switch]$PassThru, ############################################################################### [parameter( Mandatory = $false, HelpMessage = "Don't open webbrowser, just return the url" )] [switch] $ReturnURL, ############################################################################### [parameter( Mandatory = $false, HelpMessage = 'After opening webbrowser, return the url' )] [switch] $ReturnOnlyURL, ############################################################################### [Alias('nfs', 'nf')] [Parameter( Mandatory = $false, HelpMessage = "Don't open in fullscreen mode" )] [switch] $NoFullScreen, ############################################################################### [Alias('na', 'napp', 'noappmode')] [Parameter( Mandatory = $false, HelpMessage = 'Do show the browser controls' )] [switch] $NoApplicationMode, ############################################################################### [Parameter( HelpMessage = 'Removes the borders of the browser window.' )] [Alias('nb')] [switch] $NoBorders, ############################################################################### [Parameter( HelpMessage = 'Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor.' )] [Alias('sbs')] [switch] $SideBySide, ############################################################################### [Parameter( HelpMessage = 'Use alternative settings stored in session for AI preferences.' )] [switch] $SessionOnly, ############################################################################### [Parameter( HelpMessage = 'Clear alternative settings stored in session for AI preferences.' )] [switch] $ClearSession, ############################################################################### [Parameter( HelpMessage = 'Store settings only in persistent preferences without affecting session.' )] [Alias('FromPreferences')] [switch] $SkipSession ) begin { # determine google domain based on language $code = 'www' if (-not [string]::IsNullOrWhiteSpace($Language)) { # retrieve language code from helper function $code = (GenXdev.Helpers\Get-WebLanguageDictionary)[$Language] # add accept-lang parameter if not already specified if (-not $PSBoundParameters.ContainsKey('AcceptLang')) { $null = $PSBoundParameters.Add('AcceptLang', $code) } } # configure application mode behavior if not explicitly disabled if (-not $PSBoundParameters.ContainsKey('NoApplicationMode')) { # enable application mode for clean gaming interface $null = $PSBoundParameters.Add('ApplicationMode', $true) # ensure new window is created for clean startup if (-not $PSBoundParameters.ContainsKey('NewWindow')) { $null = $PSBoundParameters.Add('NewWindow', $true) } # enable fullscreen mode for immersive gaming experience if (-not $PSBoundParameters.ContainsKey('FullScreen')) { $null = $PSBoundParameters.Add('FullScreen', $true) } } # remove nofullscreen parameter if present to avoid conflicts if ($PSBoundParameters.ContainsKey('NoFullScreen')) { $null = $PSBoundParameters.Remove('NoFullScreen') } # remove duplicate nofullscreen parameter if present if ($PSBoundParameters.ContainsKey('NoFullScreen')) { $null = $PSBoundParameters.Remove('NoFullScreen') } # remove noapplicationmode parameter if present to avoid conflicts if ($PSBoundParameters.ContainsKey('NoApplicationMode')) { $null = $PSBoundParameters.Remove('NoApplicationMode') } # configure browser extensions behavior if (-not $PSBoundParameters.ContainsKey('BrowserExtensions')) { # disable browser extensions for better gaming performance $null = $PSBoundParameters.Add('NoBrowserExtensions', $true) } else { # remove browserextensions parameter to avoid conflicts $null = $PSBoundParameters.Remove('BrowserExtensions') } # remove spectateonly parameter as it's handled locally if ($PSBoundParameters.ContainsKey('SpectateOnly')) { $null = $PSBoundParameters.Remove('SpectateOnly') } # construct the game url based on spectate mode $url = ('https://yab.genxdev.net/#/ai/' + "$($SpectateOnly ? 'spectate': 'battle')/") # add url parameter if not already specified if (-not $PSBoundParameters.ContainsKey('Url')) { $null = $PSBoundParameters.Add('Url', $url) } # Copy identical parameters between functions $params = GenXdev.Helpers\Copy-IdenticalParamValues ` -FunctionName 'GenXdev.Webbrowser\Open-Webbrowser' ` -BoundParameters $PSBoundParameters ` -DefaultValues (Microsoft.PowerShell.Utility\Get-Variable ` -Scope Local -ErrorAction SilentlyContinue) GenXdev.Webbrowser\Open-Webbrowser @params # ensure url parameter is set correctly $invocationArguments.'Url' = $url # output verbose information about the game url Microsoft.PowerShell.Utility\Write-Verbose "Game URL: $url" # handle return url only scenario if ($ReturnOnlyURL) { Microsoft.PowerShell.Utility\Write-Output $url return } # launch browser with configured parameters GenXdev.Webbrowser\Open-Webbrowser @invocationArguments # return url if requested if ($ReturnURL) { Microsoft.PowerShell.Utility\Write-Output $url } } process { } end { } } ############################################################################### |