From f8a9cb8cca0a597d5fa170c46069990800546cf3 Mon Sep 17 00:00:00 2001 From: Alex Kup <116945542+Lifailon@users.noreply.github.com> Date: Fri, 19 Jan 2024 11:12:06 +0300 Subject: [PATCH] Add Discord, RapidAPI and google api --- README.md | 388 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 304 insertions(+), 84 deletions(-) diff --git a/README.md b/README.md index 3f7a15e..998b8ce 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,6 @@ - [TrueNAS](#truenas) - [Veeam](#veeam) - [REST API](#rest-api) -- [Telegram](#telegram) - [Pode](#pode) - [Selenium](#selenium) - [IE](#ie) @@ -93,10 +92,14 @@ - [YandexGPT](#YandexGPT) - [SuperAGI](#superagi) - [Replicate](#replicate) +- [Google-API](#google-api) +- [RapidAPI](#rapidapi) - [TMDB](#tmdb) - [ivi](#ivi) - [Kinopoisk](#kinopoisk) - [VideoCDN](#videocdn) +- [Telegram](#telegram) +- [Discord](#discord) # Help @@ -250,7 +253,9 @@ ps | Sort-Object -Descending CPU | select -first 10 ProcessName, # сортир @{Label="RunTime"; Expression={((Get-Date) - $_.StartTime) -replace "\.\d+$"}} # вычесть из текущего времени - время запуска, и удалить milisec ``` ### Select-String -`ipconfig /all | Select-String dns` поиск текста +`$(ipconfig | Select-String IPv4) -replace ".+: " | Where-Object {$_ -match "^172."}` узнать только IP \ +`$Current_IP = Get-Content $RDCMan_RDG_PATH | Select-String $RDCMan_Display_Name -Context 0,1` получить две строки \ +`$Current_IP = $Current_IP.Context.DisplayPostContext[0] -replace ".+|<\/name>"` забрать только вторую строку и удалить тэги ### Format-Table/Format-List `Get-Process | ft ProcessName, StartTime -Autosize` автоматическая группировка размера столбцов @@ -2686,88 +2691,6 @@ $vjob = $vjob.Content | ConvertFrom-Json $vjob = Invoke-RestMethod "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -SkipCertificateCheck $vjob.data.virtualMachines.includes.inventoryObject ``` -# Telegram - -`@BotFather (https://t.me/BotFather) /newbot` \ -`https://api.telegram.org/bot/` -```PowerShell -function Get-FromTelegram { -param ( - $token = "687...:AAF...", - [switch]$last, - [switch]$date -) -$endpoint = "getUpdates" -$url = "https://api.telegram.org/bot$token/$endpoint" -$result = Invoke-RestMethod -Uri $url -if ($date) { -$Collections = New-Object System.Collections.Generic.List[System.Object] -foreach ($r in $($result.result)) { - $EpochTime = [DateTime]"1/1/1970" - $TimeZone = Get-TimeZone - $UTCTime = $EpochTime.AddSeconds($r.message.date) - $d = $UTCTime.AddMinutes($TimeZone.BaseUtcOffset.TotalMinutes) - #$d - $Collections.Add([PSCustomObject]@{ - Message = $r.message.text; - Date = $d - }) -} -$Collections -} else { -if ($last) { - $result.result.message.text[-1] # прочитать последнее сообщение -} else { - $result.result.message.text -} -#$result.result.message.chat.id[-1] # получить индивидуальный chat_id с ботом -} -} -``` -`Get-FromTelegram` \ -`Get-FromTelegram -last` \ -`Get-FromTelegram -date` - -https://core.telegram.org/bots/api#sendmessage -```PowerShell -function Send-ToTelegram { -param ( -[Parameter(Mandatory = $True)]$Text, -$token = "687...:AAF...", -$chat = "125468108" -) -$endpoint = "sendMessage" -$url = "https://api.telegram.org/bot$token/$endpoint" -$Body = @{ -chat_id = $Chat -text = $Text -} -Invoke-RestMethod -Uri $url -Body $Body -} -``` -`Send-ToTelegram -Text "Send test from powershell"` -```PowerShell -$LastDate = (Get-FromTelegram -date)[-1].Date -while ($true) { - $LastMessage = (Get-FromTelegram -date)[-1] - Start-Sleep 1 - $LastDateTest = $LastMessage.Date - if (($LastMessage.Message -match "/Service") -and ($LastDate -ne $LastDateTest)) { - $ServiceName = $($LastMessage.Message -split " ")[-1] - $Result = $(Get-Service $ServiceName -ErrorAction Ignore).Status - if ($Result) { - Send-ToTelegram -Text $Result - } else { - Send-ToTelegram -Text "Service not found" - } - $LastDate = $LastDateTest - } -} -``` -`/Service vpnagent` \ -`/Service WinRM` \ -`/Service test` - # Pode ```PowerShell Start-PodeServer { @@ -6637,6 +6560,80 @@ while ($response.status -ne "succeeded") { } $response.output ``` +# Google-API + +### Google-Translate +```PowerShell +$Key = "" # получить токен: https://console.cloud.google.com/apis/credentials +$Text = "You can see in the right corner how long each translation request takes (this does not depend on the amount of text being transferred)." +$LanguageTarget = "RU" +$LanguageSource = "EN" +$url = "https://translation.googleapis.com/language/translate/v2?key=$key" +$Header = @{ + "Content-Type" = "application/json" +} +$Body = @{ + "q" = "$Text" + "target" = "$LanguageTarget" + "source" = "$LanguageSource" +} | ConvertTo-Json +$WebClient = New-Object System.Net.WebClient +foreach ($key in $Header.Keys) { + $WebClient.Headers.Add($key, $Header[$key]) +} +$Response = $WebClient.UploadString($url, "POST", $Body) | ConvertFrom-Json +$Response.data.translations.translatedText +``` +### Google-Search +```PowerShell +$Key = "" # получить токен: https://developers.google.com/custom-search/v1/overview?hl=ru (пользовательский поиск JSON API предоставляет 100 поисковых запросов в день бесплатно) +$cx = "35c78340f49eb474a" # создать поисковую систему https://programmablesearchengine.google.com/controlpanel/all +$Query = "как создать бота discord" +$Lang = "ru" +$Num = 10 +$Start = 0 +$response = Invoke-RestMethod "https://www.googleapis.com/customsearch/v1?q=$Query&key=$Key&cx=$cx&lr=lang_$Lang&num=$Num&$start=$Start" +$response.items | Select-Object title,snippet,displayLink,link | Format-List +``` +# RapidAPI + +https://rapidapi.com/ru/neoscrap-net/api/google-search72 +```PowerShell +$Key = "" +$headers=@{} +$headers.Add("X-RapidAPI-Key", "$Key") +$headers.Add("X-RapidAPI-Host", "google-search72.p.rapidapi.com") +$query = "как создать бота discord" +$response = Invoke-RestMethod "https://google-search72.p.rapidapi.com/search?q=$query%20gitgub&gl=us&lr=lang_ru&num=20&start=0" -Method GET -Headers $headers +$response.items | Select-Object title,snippet,displayLink,link | Format-List +``` +### IMDb + +https://rapidapi.com/apidojo/api/imdb8 +```PowerShell +$key = "" # 500 запросов в месяц +$query="Break" +$headers=@{} +$headers.Add("X-RapidAPI-Key", "$key") +$headers.Add("X-RapidAPI-Host", "imdb8.p.rapidapi.com") +$response = Invoke-RestMethod "https://imdb8.p.rapidapi.com/title/find?q=$query" -Method GET -Headers $headers +$response.results | select title,titletype,year,runningTimeInMinutes,id | Format-Table +"https://www.imdb.com$($response.results.id[0])" +$response.results.principals # актеры +$response.results.image +``` +### MoviesDatabase + +https://rapidapi.com/SAdrian/api/moviesdatabase + +$key = "" +$imdb_id = "tt0455275" +$headers=@{} +$headers.Add("X-RapidAPI-Key", "$key") +$headers.Add("X-RapidAPI-Host", "moviesdatabase.p.rapidapi.com") +$response = Invoke-RestMethod "https://moviesdatabase.p.rapidapi.com/titles/$imdb_id" -Method GET -Headers $headers +$response.results + # TMDB https://developer.themoviedb.org/reference/intro/getting-started @@ -6782,3 +6779,226 @@ ep="tv-series" curl -s "https://videocdn.tv/api/$ep?api_token=$token&field=kinopoisk_id&query=$kp_id" | jq ".data[].episodes | length" # количество серий curl -s "https://videocdn.tv/api/$ep?api_token=$token&field=kinopoisk_id&query=$kp_id" | jq ".data[].episodes[] | select(.season_num == 2) | {episode: .ru_title, voice: .media[].translation.title}" # отфильтровать параметры вывода ``` +# Telegram + +@BotFather (https://t.me/BotFather) /newbot + +https://api.telegram.org/bot/ + +https://core.telegram.org/bots/api#getupdates +```PowerShell +function Get-FromTelegram { + param ( + $Token = "687...:AAF...", + [switch]$Date, + [switch]$Last, + [switch]$ChatID + ) + $endpoint = "getUpdates" + $url = "https://api.telegram.org/bot$Token/$endpoint" + $result = Invoke-RestMethod -Uri $url + if ($Date) { + $Collections = New-Object System.Collections.Generic.List[System.Object] + foreach ($r in $($result.result)) { + $EpochTime = [DateTime]"1/1/1970" + $TimeZone = Get-TimeZone + $UTCTime = $EpochTime.AddSeconds($r.message.date) + $d = $UTCTime.AddMinutes($TimeZone.BaseUtcOffset.TotalMinutes) + $Collections.Add([PSCustomObject]@{ + Message = $r.message.text; + Date = $d + }) + } + $Collections + } + else { + if ($Last) { + $result.result.message.text[-1] + } + elseif ($ChatID) { + $Collections = New-Object System.Collections.Generic.List[System.Object] + foreach ($r in $($result.result)) { + $Collections.Add([PSCustomObject]@{ + Message = $r.message.text; + UserName = $r.message.chat.username; + ChatID = $r.message.chat.id; + ChatType = $r.message.chat.type + }) + } + $Collections + } + else { + $result.result.message.text + } + } +} +``` +`Get-FromTelegram` \ +`Get-FromTelegram -Last` \ +`Get-FromTelegram -Date` \ +`Get-FromTelegram -ChatID` + +https://core.telegram.org/bots/api#sendmessage +```PowerShell +function Send-ToTelegram { +param ( + [Parameter(Mandatory = $True)]$Text, + $Token = "687...:AAF...", + $Chat = "125468108", + $Keyboard +) + $endpoint = "sendMessage" + $url = "https://api.telegram.org/bot$Token/$endpoint" + $Body = @{ + chat_id = $Chat + text = $Text + } + if ($keyboard -ne $null) { + $Body += @{reply_markup = $keyboard} + } + Invoke-RestMethod -Uri $url -Body $Body +} +``` +`Send-ToTelegram -Text "Send test from powershell"` +```PowerShell +$LastDate = (Get-FromTelegram -date)[-1].Date +while ($true) { + $LastMessage = (Get-FromTelegram -date)[-1] + Start-Sleep 1 + $LastDateTest = $LastMessage.Date + if (($LastMessage.Message -match "/Service") -and ($LastDate -ne $LastDateTest)) { + $ServiceName = $($LastMessage.Message -split " ")[-1] + $Result = $(Get-Service $ServiceName -ErrorAction Ignore).Status + if ($Result) { + Send-ToTelegram -Text $Result + } else { + Send-ToTelegram -Text "Service not found" + } + $LastDate = $LastDateTest + } +} +``` +`/Service vpnagent` \ +`/Service WinRM` \ +`/Service test` + +### Button +```PowerShell +$keyboard = '{ + "inline_keyboard":[[ + {"text":"Uptime","callback_data":"/Uptime"}, + {"text":"Test","callback_data":"/Test"} + ]] +}' +Send-ToTelegram -Text "Test buttons" -Keyboard $keyboard +$request = (Invoke-RestMethod -Uri "https://api.telegram.org/bot$Token/getUpdates").result.callback_query +$request.data # прочитать callback_data нажатой кнопки +$request.message.date +``` +# Discord + +https://discord.com/developers/applications + +Создаем Applications (General Information). В Bot привязываем к Application и копируем токен авторизации. В OAuth2 - URL Generator выбираем bot и права Administrator и копируем созданный URL для добавления на канал. Переходим по url и добавляем бота на сервер. Получаем ID канала на сервере (текстовые каналы, правой кнопкой мыши копируем ссылку и забираем последний id в url). + +### Send to Discord +```Bash +DISCORD_TOKEN="MTE5NzE1NjM0NTM3NjQxMTcyOQ.XXXXXX.EzBF6RA9Kx_MSuhLW5elH1U-XXXXXXXXXXXXXX" +DISCORD_CHANNEL_ID="119403124XXXXXXXXXX" +TEXT="test from bash" +URL="https://discordapp.com/api/channels/$DISCORD_CHANNEL_ID/messages" +curl -s -X POST $URL \ + -H "Authorization: Bot $DISCORD_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"content\": \"$TEXT\"}" +``` +```PowerShell +$DISCORD_TOKEN = "MTE5NzE1NjM0NTM3NjQxMTcyOQ.XXXXXX.EzBF6RA9Kx_MSuhLW5elH1U-XXXXXXXXXXXXXX" +$DISCORD_CHANNEL_ID = "119403124XXXXXXXXXX" +$TEXT = "test from PowerShell" +$URL = "https://discordapp.com/api/channels/$DISCORD_CHANNEL_ID/messages" +$Body = @{ + content = $TEXT +} | ConvertTo-Json +curl -s $URL -X POST -H "Authorization: Bot $DISCORD_TOKEN" -H "Content-Type: application/json" -d $Body +``` +### Read from Discord +```Bash +curl -s -X GET $URL \ + -H "Authorization: Bot $DISCORD_TOKEN" \ + -H "Content-Type: application/json" | jq -r .[0].content +``` +```PowerShell +$messages = (curl -s -X GET $URL -H "Authorization: Bot $DISCORD_TOKEN" -H "Content-Type: application/json" | ConvertFrom-Json) +$messages | Select-Object content,timestamp,{$_.author.username} +``` +### HttpClient +```PowerShell +$DISCORD_TOKEN = "MTE5NzE1NjM0NTM3NjQxMTcyOQ.XXXXXX.EzBF6RA9Kx_MSuhLW5elH1U-XXXXXXXXXXXXXX" +$DISCORD_CHANNEL_ID = "119403124XXXXXXXXXX" +$URL = "https://discordapp.com/api/channels/$DISCORD_CHANNEL_ID/messages" +$HttpClient = New-Object System.Net.Http.HttpClient +$HttpClient.DefaultRequestHeaders.Authorization = "Bot $DISCORD_TOKEN" +$response = $HttpClient.GetAsync($URL).Result +$messages = $response.Content.ReadAsStringAsync().Result +($messages | ConvertFrom-Json).content +``` +### Button +```Bash +curl -X POST $URL \ + -H "Content-Type: application/json" \ + -H "Authorization: Bot $DISCORD_TOKEN" \ + -d ' + { + "content": "Test text for button", + "components": [ + { + "type": 1, + "components": [ + { + "type": 2, + "label": "Button", + "style": 1, + "custom_id": "button_click" + } + ] + } + ] + }' +``` +### Discord.Net.Webhook +```PowerShell +Add-Type -Path $(ls "$home\Documents\Discord.NET\*.dll").FullName +# https://discordapp.com/api/webhooks// (Настроить канал - Интеграция) +$webhookId = 1197577280000000000 +$webhookToken = "rs8AA-XXXXXXXXXXX_Vk5RUI4A6HuSGhpCCTepq25duwCwLXasfv6u23a7XXXXXXXXXX" +$messageContent = "Test dotNET" +$client = New-Object Discord.Webhook.DiscordWebhookClient($webhookId, $webhookToken) +$client.SendMessageAsync($messageContent).Wait() +``` +### Discord.Net.WebSocket +```PowerShell +$DiscordAssemblies = $(ls "$home\Documents\Discord.NET\*.dll").FullName +foreach ($assembly in $DiscordAssemblies) { + Add-Type -Path $assembly +} +$DISCORD_TOKEN = "MTE5NzE1NjM0NTM3NjQxMTcyOQ.XXXXXX.EzBF6RA9Kx_MSuhLW5elH1U-XXXXXXXXXXXXXX" +$Client = New-Object Discord.WebSocket.DiscordSocketClient +$Client.Add_MessageReceived({ + param($message) + if ($message.Author.Id -ne $Client.CurrentUser.Id) { + Write-Host ("Received message from " + $message.Author.Username + ": " + $message.Content) + if ($message.Content.Contains("ping")) { + $message.Channel.SendMessageAsync("pong").GetAwaiter().GetResult() + } + } +}) +$Client.LoginAsync([Discord.TokenType]::Bot, $DISCORD_TOKEN).GetAwaiter().GetResult() +#$Client.StartAsync().Wait() +$Client.StartAsync().GetAwaiter().GetResult() +$Client.ConnectionState + +[console]::ReadKey($true) +$Client.LogoutAsync().GetAwaiter().GetResult() +$Client.Dispose() +```