add matrix-screenshot.ps1
							parent
							
								
									8704797319
								
							
						
					
					
						commit
						4dfc24132c
					
				| @ -0,0 +1,82 @@ | |||||||
|  | #!/usr/bin/env pwsh | ||||||
|  | 
 | ||||||
|  | <# | ||||||
|  | .SYNOPSIS | ||||||
|  |     Takes a screenshot and puts the URl into the clipboard | ||||||
|  | .DESCRIPTION | ||||||
|  |     Uses grim and slurp to create a screenshot and uploads it into a matrix content repository. | ||||||
|  |     A GETable URL is placed into the clipboard via wl-copy and optionally sent to the specified room. | ||||||
|  | .NOTES | ||||||
|  |     Example config at $HOME/.config/matrix-screenshot.ps1: | ||||||
|  | 
 | ||||||
|  |     ``` | ||||||
|  |     $roomId = '!XpxHNLnPsnNEbScyeh:imninja.net' | ||||||
|  |     $accessToken = 'NotaReALaCceSSTOk3n' | ||||||
|  |     $homeserverUrl = 'https://imninja.net' | ||||||
|  |     ``` | ||||||
|  | #> | ||||||
|  | [CmdletBinding()] | ||||||
|  | param ( | ||||||
|  |     # Takes a fullscreen screenshot instead of selecting an area. | ||||||
|  |     [switch] | ||||||
|  |     $Fullscreen | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | $ErrorActionPreference = 'Stop' | ||||||
|  | Set-StrictMode -Version 3.0 | ||||||
|  | 
 | ||||||
|  | # import config | ||||||
|  | . (Join-Path $env:HOME '.config/matrix-screenshot.ps1') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | $tmp = New-TemporaryFile | ||||||
|  | 
 | ||||||
|  | if ($Fullscreen) { | ||||||
|  |     grim $tmp.FullName | ||||||
|  | } else { | ||||||
|  |     grim -g $(slurp) $tmp.FullName | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if (($tmp | Get-Item).Length -eq 0) { | ||||||
|  |     Write-Error ('Screenshot file "{0}" is empty' -f $tmp.FullName) -ErrorAction Continue | ||||||
|  |     $tmp | Remove-Item | ||||||
|  |     exit | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $mediaSplat = @{ | ||||||
|  |     Authentication = 'Bearer' | ||||||
|  |     Token = $accessToken | ConvertTo-SecureString -AsPlainText | ||||||
|  |     Headers = @{ | ||||||
|  |         'Content-Type' = 'image/jpeg' | ||||||
|  |     } | ||||||
|  |     Method = 'Post' | ||||||
|  |     Uri = ($homeserverUrl+'/_matrix/media/r0/upload') | ||||||
|  |     InFile = $tmp.FullName | ||||||
|  | } | ||||||
|  | $media = Invoke-RestMethod @mediaSplat | ||||||
|  | 
 | ||||||
|  | $tmp | Remove-Item | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | $serverName = $media.content_uri.Split('/')[2] | ||||||
|  | $mediaId = $media.content_uri.Split('/')[3] | ||||||
|  | $mediaUrl = '{0}/_matrix/media/r0/download/{1}/{2}' -f $homeserverUrl,$serverName,$mediaId | ||||||
|  | 
 | ||||||
|  | $mediaUrl | wl-copy | ||||||
|  | 
 | ||||||
|  | if ($roomId) { | ||||||
|  |     $eventSplat = @{ | ||||||
|  |         Authentication = 'Bearer' | ||||||
|  |         Token = $accessToken | ConvertTo-SecureString -AsPlainText | ||||||
|  |         Method = 'Put' | ||||||
|  |         Uri = '{0}/_matrix/client/r0/rooms/{1}/send/{2}/{3}' -f $homeserverUrl,$roomId,'m.room.message',($tmp.Name) | ||||||
|  |         Body = @{ | ||||||
|  |             body = $tmp.Name | ||||||
|  |             msgtype = 'm.image' | ||||||
|  |             url = $media.content_uri | ||||||
|  |         } | ConvertTo-Json | ||||||
|  |     } | ||||||
|  |     $event = Invoke-RestMethod @eventSplat | ||||||
|  | 
 | ||||||
|  |     Write-Output ('{0}' -f $event.event_id) | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in New Issue