From 00640f3ab6cfaa0fbe6dca04a792954cc614db0e Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sat, 18 May 2024 22:29:36 -0400 Subject: [PATCH] Spaghetti code do not look --- src/api/users.cr | 91 ++++++++++++++++++++++++++++++-------------- src/config.cr | 55 +++++++++++++------------- src/main.cr | 52 ++++++++++++------------- src/twitchapi/gql.cr | 57 ++++++++++++++++++--------- 4 files changed, 154 insertions(+), 101 deletions(-) diff --git a/src/api/users.cr b/src/api/users.cr index 7d927e6..e2d9921 100644 --- a/src/api/users.cr +++ b/src/api/users.cr @@ -15,15 +15,45 @@ require "../twitchapi/*" module Users def self.checkBanned(gql) - puts "tst2" - pp gql["userResultByLogin"] - pp gql["userResultByID"] - if gql["userResultByLogin"].nil? - return nil - elsif gql["userResultByID"].nil? - return nil - else - return true + # puts "checkBanned: #{gql}" + # puts (typeof(gql)) + # if gql["userResultByLogin"] + # return false + # if gql["userResultByLogin"]["result"]? + # return true + # else + # return false + # end + # elsif gql["userResultByID"]? + # return false + # if gql["userResultByID"]["reason"]? + # return true + # else + # return false + # end + # else + # return true + # end + # if gql["userResultByLogin"]["reason"]? + # return true + # elsif gql["userResultByID"]["reason"]? + # return true + # else + # return false + # end + # return false + if GqlAPI.urb().includes? "login" + if gql["userResultByLogin"]["reason"]? + return true + else + return false + end + elsif GqlAPI.urb().includes? "id" + if gql["userResultByID"]["reason"]? + return true + else + return false + end end end @@ -33,12 +63,12 @@ module Users # login = helixUsers["data"][0]["login"] # id = helixUsers["data"][0]["id"] # rescue - # login = nil - # id = nil + # login = nil + # id = nil # end # if login.nil? && params.has_key?("login") - # login = params["login"] + # login = params["login"] # elsif id.nil? && params.has_key?("id") # id = params["id"] # end @@ -48,17 +78,20 @@ module Users # a = Channel(JSON::Any).new # spawn do - # a.send fetchGQL(id.to_s) + # a.send fetchGQL(id.to_s) # end gql = GqlAPI.query(params) panels = gql["user"]["panels"] - banned = checkBanned(gql) - pp gql + banned = checkBanned(gql) + # puts banned + # puts ("urb #{GqlAPI.urb()}") + # pp gql json_data = [ { - # "banned" => banned, # TODO: FIX BANNED + "banned" => banned, + "reason" => nil, "displayName" => gql["user"]["displayName"], "login" => gql["user"]["login"], "id" => gql["user"]["id"], @@ -76,23 +109,23 @@ module Users "deletedAt" => gql["user"]["deletedAt"], "emotePrefix" => gql["user"]["emoticonPrefix"]["name"], "roles" => { - "isAffiliate" => gql["user"]["roles"]["isAffiliate"], - "isPartner" => gql["user"]["roles"]["isPartner"], - "isStaff" => gql["user"]["roles"]["isStaff"], + "isAffiliate" => gql["user"]["roles"]["isAffiliate"], + "isPartner" => gql["user"]["roles"]["isPartner"], + "isStaff" => gql["user"]["roles"]["isStaff"], }, - "badges" => gql["user"]["displayBadges"], - "chatterCount" => gql["user"]["channel"]["chatters"]["count"], - "chatSettings" => gql["user"]["chatSettings"], - "stream" => gql["user"]["stream"], - "lastBroadcast" => gql["user"]["lastBroadcast"], - "panels" => panels, + "badges" => gql["user"]["displayBadges"], + "chatterCount" => gql["user"]["channel"]["chatters"]["count"], + "chatSettings" => gql["user"]["chatSettings"], + "stream" => gql["user"]["stream"], + "lastBroadcast" => gql["user"]["lastBroadcast"], + "panels" => panels, }, ] - # if json_data[0]["banned"].nil? - # puts "test" - # json_data[0]["reason"] = gql["userResultByID"]["reason"] - # end + # if json_data[0]["banned"].nil? + # puts "test" + # json_data[0]["reason"] = gql["userResultByID"]["reason"] + # end return json_data.to_json end diff --git a/src/config.cr b/src/config.cr index 51ed439..62adc21 100644 --- a/src/config.cr +++ b/src/config.cr @@ -5,37 +5,36 @@ class Config property helixOAuth : String? property helixClientID : String? - property gqlOAuth : String? + property gqlOAuth : String? property gqlClientID : String? - property apiEndpoint : String? - property gqlEndpoint : String? + property apiEndpoint : String? + property gqlEndpoint : String? - def self.load - config_file = "config/config.yml" - config_yaml = File.read(config_file) - config = Config.from_yaml(config_yaml) + def self.load + config_file = "config/config.yml" + config_yaml = File.read(config_file) + config = Config.from_yaml(config_yaml) - if config.helixOAuth.to_s.empty? - puts "Config: 'helixOAuth' is required/can't be empty" - exit(1) - end - - if config.helixClientID.to_s.empty? - puts "Config: 'helixOAuth' is required/can't be empty" - exit(1) - end - - if config.apiEndpoint.to_s.empty? - puts "Config: 'apiEndpoint' is required/can't be empty" - exit(1) - end + if config.helixOAuth.to_s.empty? + puts "Config: 'helixOAuth' is required/can't be empty" + exit(1) + end - if config.gqlEndpoint.to_s.empty? - puts "Config: 'apiEndpoint' is required/can't be empty" - exit(1) - end + if config.helixClientID.to_s.empty? + puts "Config: 'helixOAuth' is required/can't be empty" + exit(1) + end - return config - end + if config.apiEndpoint.to_s.empty? + puts "Config: 'apiEndpoint' is required/can't be empty" + exit(1) + end + + if config.gqlEndpoint.to_s.empty? + puts "Config: 'apiEndpoint' is required/can't be empty" + exit(1) + end + + return config + end end - diff --git a/src/main.cr b/src/main.cr index 2d319b0..3da8964 100644 --- a/src/main.cr +++ b/src/main.cr @@ -18,32 +18,32 @@ get "/twitch/user" do |env| query = env.request.query if query params = URI::Params.parse(query) - if params.has_key?("login") - begin - Users.parseData(params) - rescue ex - env.response.status_code = 401 - err = { "error" => "#{ex.message}" } - err.to_json - end - elsif params.has_key?("id") - begin - Users.parseData(params) - rescue ex - env.response.status_code = 401 - err = { "error" => "#{ex.message}" } - err.to_json - end - else - env.response.status_code = 401 - err = { "error" => "Parameter 'login' or 'id' is missing" } - err.to_json - end - else - env.response.status_code = 401 - err = { "error" => "No query parameters found" } - err.to_json - end + if params.has_key?("login") + begin + Users.parseData(params) + rescue ex + env.response.status_code = 401 + err = {"error" => "#{ex.message}"} + err.to_json + end + elsif params.has_key?("id") + begin + Users.parseData(params) + rescue ex + env.response.status_code = 401 + err = {"error" => "#{ex.message}"} + err.to_json + end + else + env.response.status_code = 401 + err = {"error" => "Parameter 'login' or 'id' is missing"} + err.to_json + end + else + env.response.status_code = 401 + err = {"error" => "No query parameters found"} + err.to_json + end end Kemal.run diff --git a/src/twitchapi/gql.cr b/src/twitchapi/gql.cr index 2cbe443..2ef8acf 100644 --- a/src/twitchapi/gql.cr +++ b/src/twitchapi/gql.cr @@ -8,34 +8,47 @@ module GqlAPI "Authorization" => "OAuth #{CONFIG.gqlOAuth}", "Client-Id" => "#{CONFIG.gqlClientID}", } + @@urb : String = "fuck" - def self.userResultBy (params) - if params.has_key?("id") + def self.urb + return @@urb + end + + def self.userResultBy(params) + if params.has_key?("id") return %(userResultByID(id: "#{params["id"]}")) else - return %(userResultByLogin(login: "#{params["login"]}")) + return %(userResultByLogin(login: "#{params["login"]}")) end - end + end - # def self.channel (params) - # if params.has_key?("id") + def self.loginOrID(params) + if params.has_key?("id") + return %(userResultByID(id: "#{params["id"]}")), %(user(id: "#{params["id"]}" lookupType: ALL)) + else + return %(userResultByLogin(login: "#{params["login"]}")), %(user(login: "#{params["login"]}" lookupType: ALL)) + end + end + + # def self.channel (params) + # if params.has_key?("id") # return %(channel(id: "#{params["id"]}")) # else - # return %(channel(name: "#{params["login"]}")) + # return %(channel(name: "#{params["login"]}")) # end - # end + # end - def self.user (params) - if params.has_key?("id") + def self.user(params) + if params.has_key?("id") return %(user(id: "#{params["id"]}" lookupType: ALL)) else - return %(user(login: "#{params["login"]}" lookupType: ALL)) + return %(user(login: "#{params["login"]}" lookupType: ALL)) end - end + end def self.query(params) - puts params - # id = params["id"] + # puts params + # id = params["id"] # data = { "query" => "{user(id:#{id}){ # bannerImageURL, @@ -54,9 +67,10 @@ module GqlAPI # stream{averageFPS,bitrate,codec,createdAt,width,height,id,viewersCount,type,game{displayName}}, # lastBroadcast{game{displayName},id,startedAt,title} # }}" } + @@urb = userResultBy(params) query = %( query { - #{userResultBy(params)} { + #{@@urb} { ... on UserDoesNotExist { key reason @@ -143,7 +157,12 @@ module GqlAPI } } ) - return JSON.parse(gqlReq(params, query))["data"] + # puts JSON.parse(gqlReqq)["data"] + # puts ("gqlReq JSON.parse typeof: #{typeof (gqlReqq)}") + # puts ("gqlReq JSON.parse typeof: #{typeof(JSON.parse(gqlReq(params, query))["data"])}") + # puts ("gqlReq JSON.parse.to-H typeof: #{typeof (gqlReqq.to_h)}") + # puts ((JSON.parse(gqlReq(params, query)))["data"])["userResultByID"]["reason"]? + return (JSON.parse(gqlReq(params, query)))["data"] end # def self.isBanned(id : String) @@ -153,8 +172,8 @@ module GqlAPI # def self.channel(id : String) # data = {"query" => "{channel(id:#{id}){ - # chatters{count,moderators{login},vips{login}} - # }}"} + # chatters{count,moderators{login},vips{login}} + # }}"} # return JSON.parse(gqlReq(id, data.to_json))["data"]["channel"] # end @@ -167,9 +186,11 @@ module GqlAPI def self.gqlReq(params, query) data = {"query" => query} + # puts (typeof(data)) response = HTTP::Client.post(CONFIG.gqlEndpoint.to_s, headers: @@headers, body: data.to_json) if response.success? + # puts (typeof(response.body)) return (response.body) else raise "GQL Twitch API returned #{response.status_code}: #{response.body.to_s}"