-
Notifications
You must be signed in to change notification settings - Fork 2
/
DiscordSendWebhook_v1.0.au3
119 lines (117 loc) · 5.84 KB
/
DiscordSendWebhook_v1.0.au3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Resources\phoenix_5Vq_icon.ico
#AutoIt3Wrapper_Outfile=Builds\DiscordSendWebhook.exe
#AutoIt3Wrapper_Res_Comment=https://github.com/phoenix125
#AutoIt3Wrapper_Res_Description=Send messages to Discord via command line
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_ProductName=SteamServerQuery
#AutoIt3Wrapper_Res_ProductVersion=1.0.0
#AutoIt3Wrapper_Res_CompanyName=http://www.Phoenix125.com
#AutoIt3Wrapper_Res_LegalCopyright=http://www.Phoenix125.com
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Au3Stripper=y
#AutoIt3Wrapper_Change2CUI=y
#Au3Stripper_Parameters=/mo
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
Local $aMessage, $aBotName, $aBotAvatar
Local $aWebhook[1]
$aWebhook[0] = "Begin"
Global $aBotTTS = False
Global $aDetailedStatus = False
Global $aHelp = 'Use: DiscordSendWebhook.exe {URL} {Message} {BotName(Optional)}' & @CRLF & _
' or: DiscordSendWebhook.exe -m "message" -w http://Webhook1URL.com -w http://Webhook2URL.com -n "My Discord Bot Name"' & @CRLF & _
@CRLF & _
'Parameters:' & @CRLF & _
'-h = Displays this help text' & @CRLF & _
'-w = Webhook URL' & @CRLF & _
'-m = Message' & @CRLF & _
'-n = Bot Name (Optional)' & @CRLF & _
'-a = Bot Avatar URL (Optional)' & @CRLF & _
'-t = Bot TTS (Optional)' & @CRLF & _
'-d = Detailed Status Report (Optional)' & @CRLF & _
'Send to multiple Webhooks by adding -w {URL}.' & @CRLF & _
@CRLF & _
'Example 1:' & @CRLF & _
' DiscordSendWebhook.exe -w "https://discordapp.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890123456" -m "Message" -n "MyBotName" -a http://www.phoenix125.com/DiscordAvatar.jpg -t -d' & @CRLF & _
'Example 2 (No parameters):' & @CRLF & _
' DiscordSendWebhook.exe "https://discordapp.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890123456" "Message" "MyBotName"' & @CRLF & _
'Example 3 (Multiple Webhooks):' & @CRLF & _
' DiscordSendWebhook.exe -w "https://discordapp.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890123456" -w "https://discordapp.com/api/webhooks/987654321098765432/6543210987654321ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba" -m "Message" -n "MyBotName"' & @CRLF & _
@CRLF & _
'Note! If message or bot name contain spaces, wrap them in quotes. ie. -m "This is my message" -n "My Bot Name"' & @CRLF & _
'Note! Messages over 2000 characters will be cropped.' & @CRLF & _
'Note! Only works with default Discord Emojis :(' & @CRLF & _
@CRLF & _
'Thank you. Visit https://github.com/phoenix125 for updates and/or more programs.' & @CRLF
If $CmdLine[0] < 1 Then Help()
If StringInStr($CmdLine[1], "(") Then
_ArrayDelete($CmdLine, 1)
$CmdLine[0] -= 1
EndIf
If StringLen($CmdLine[1]) > 3 Then
_ArrayAdd($aWebhook, $CmdLine[1])
If $CmdLine[0] > 1 Then $aMessage = $CmdLine[2]
If $CmdLine[0] > 2 Then $aBotName = $CmdLine[3]
Else
For $t = 1 To $CmdLine[0]
If $CmdLine[$t] = "-h" Then Help()
If $CmdLine[$t] = "-w" Then
$t += 1
_ArrayAdd($aWebhook, $CmdLine[$t])
EndIf
If $CmdLine[$t] = "-m" Then
$t += 1
$aMessage = $CmdLine[$t]
EndIf
If $CmdLine[$t] = "-n" Then
$t += 1
$aBotName = $CmdLine[$t]
EndIf
If $CmdLine[$t] = "-a" Then
$t += 1
$aBotAvatar = $CmdLine[$t]
EndIf
If $CmdLine[$t] = "-t" Then $aBotTTS = True
If $CmdLine[$t] = "-d" Then $aDetailedStatus = True
Next
EndIf
If StringLen($aMessage) < 1 Then Help("ERROR! No message in commandline.")
For $t = 1 To (UBound($aWebhook) - 1)
If StringLen($aWebhook[$t]) < 100 Or StringInStr($aWebhook[$t], "http") = 0 Then Help("ERROR! Webhook URL not valid.")
SendDiscordMsg($aWebhook[$t], $aMessage, $aBotName, $aBotTTS, $aBotAvatar)
Next
Exit
Func Help($tTxt = "")
If $tTxt <> "" Then $aHelp = $tTxt & @CRLF & 'Use [DiscordSendWebhook.exe -h] for help'
ConsoleWrite($aHelp & @CRLF)
Exit
EndFunc ;==>Help
Func SendDiscordMsg($sHookURL, $sBotMessage, $sBotName = "", $sBotTTS = False, $sBotAvatar = "")
$sBotMessage = StringLeft($sBotMessage, 2000)
$sBotMessage = StringReplace($sBotMessage, "\'", "'")
Local $sJsonMessage = '{"username": "' & $sBotName & '", "avatar_url": "' & $sBotAvatar & '", "content": "' & $sBotMessage & '", "tts": "' & $sBotTTS & '"}'
Local $oHTTPOST = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTPOST.Open("POST", StringStripWS($sHookURL, 3) & "?wait=True", False)
$oHTTPOST.SetRequestHeader("Content-Type", "application/json")
$oHTTPOST.Send($sJsonMessage)
Local $oStatusCode = $oHTTPOST.Status
Local $oReceived = $oHTTPOST.ResponseText
If (Int($oStatusCode) = 200) Or (Int($oStatusCode) = 204) Then
Local $tErrMsgBrief = "[OK] Message sent to WH ending with " & StringRight($sHookURL, 4) & " [" & $sBotMessage & "]"
Local $tErrMsgDetail = "[OK] Message sent to WH ending with " & StringRight($sHookURL, 4) & " (" & $sJsonMessage & "). Status Code (" & $oStatusCode & ") " & $oReceived
ElseIf Int($oStatusCode) = 429 Then
Local $tErrMsgBrief = "[ERROR] Message failed due to too many requests. WH ending with " & StringRight($sHookURL, 4) & " [" & $sBotMessage & "]"
Local $tErrMsgDetail = "[ERROR] Message failed due to too many requests. WH ending with " & StringRight($sHookURL, 4) & " (" & $sJsonMessage & ". Status Code (" & $oStatusCode & ") " & $oReceived
Else
Local $tErrMsgBrief = "[ERROR] Message failed to WH ending with " & StringRight($sHookURL, 4) & " [" & $sBotMessage & "]"
Local $tErrMsgDetail = "[ERROR] Message failed to WH ending with " & StringRight($sHookURL, 4) & " (" & $sJsonMessage & ". Status Code (" & $oStatusCode & ") " & $oReceived
EndIf
If $aDetailedStatus Then
ConsoleWrite($tErrMsgDetail & @CRLF)
Else
ConsoleWrite($tErrMsgBrief & @CRLF)
EndIf
EndFunc ;==>SendDiscordMsg