diff --git a/src/ServerStorage/ErrorPopper/WebhookService.lua b/src/ServerStorage/ErrorPopper/WebhookService.lua new file mode 100644 index 0000000..2225f5d --- /dev/null +++ b/src/ServerStorage/ErrorPopper/WebhookService.lua @@ -0,0 +1,131 @@ +local wsv4 = { + + colors = { + + ['red'] = tonumber(16711680), + ['green'] = tonumber(65280), + ['blue'] = tonumber(255), + ['black'] = tonumber(0), + ['yellow'] = tonumber(16514837) + + }, +} + +local https = game:GetService("HttpService") + +wsv4.__index = wsv4 + +function wsv4.new(...) + local self = {} + setmetatable(self, wsv4) + + local args = table.unpack({...}) + self.Title = args.Title or 'No Title Provided' + self.Description = args.Description or '' + self.Content = args.Content or '' + self.Fields = args.Fields or nil + self.Thumbnail = args.Thumbnail or '' + self.Image = args.Image or '' + self.Footer = args.Footer or '' + self.FooterIcon = args.FooterIcon or '' + self.TimeStamp = args.TimeStamp or '' + self.Color = self.Color or wsv4.colors.black + + self.Author = args.Author or '' + self.AuthorUrl = args.AuthorUrl or '' + self.AuthorLink = args.AuthorLink or '' + return self +end + + +local function postWebhook(data) + local finalUrl = wsv4.url + local finalBackupUrl = wsv4.backupUrl + + local good, bad = pcall(function() + return https:PostAsync(finalUrl, data) + end) + + if not good then + warn("Webhook Request Failed " .. bad .. " Trying backup URL") + + local goodbackup, badbackup = pcall(function() + https:PostAsync(finalBackupUrl, data) + end) + + if goodbackup then + print("Backup request success") + else + warn("Backup request failed " .. badbackup .. " bad request or both proxies down.") + end + + end +end + +function wsv4:sendMessage() + + local data = { + ['content'] = self.Content + } + + local finalData = https:JSONEncode(data) + + postWebhook(finalData) +end + +function wsv4:sendAuthorEmbed() + local data = { + ['content'] = self.Content, + ["embeds"] = {{ + ["author"] = { + ["name"] = self.Author, + ["icon_url"] = self.AuthorUrl, + ['url'] = self.AuthorLink + }, + + ["description"] = self.Description, + ["color"] = self.Color, + ["fields"] = self.Fields, + ["image"] = {["url"] = self.Image}, + ['thumbnail'] = {["url"] = self.Thumbnail}, + ['timestamp'] = self.TimeStamp, + ['footer'] = { + ['text'] = self.Footer, + ['icon_url'] = self.FooterIcon + }, + + }}, + } + + local finalData = https:JSONEncode(data) + + postWebhook(finalData) + +end + +function wsv4:sendEmbed() + + local data = { + ['content'] = self.Content, + ['embeds'] = {{ + ["image"] = {["url"] = self.Image}, + ['thumbnail'] = {["url"] = self.Thumbnail}, + ['title'] = "**"..self.Title.."**", + ['description'] = self.Description, + ['type'] = "rich", + ["color"] = self.Color, + ['fields'] = self.Fields, + ['timestamp'] = self.TimeStamp, + ['footer'] = { + ['text'] = self.Footer, + ['icon_url'] = self.FooterIcon + }, + }, + }, + } + local finalData = https:JSONEncode(data) + + postWebhook(finalData) +end + +return wsv4 \ No newline at end of file