repltalk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/queries.rb +5 -0
  3. data/lib/repltalk.rb +100 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 13027c3d3c0836aef9c475c378f3d9925279120baff4d78c257791e0ccd42e6d
4
+ data.tar.gz: 9c01fe5c68960314f4324fb19e8531222f88bfc06a76d26831c05d8518466177
5
+ SHA512:
6
+ metadata.gz: 868d939d3d8ab8a1899046304746f97f1b7ab17e6d81cdd3799642c81e7fffb8ada236c17adf90632f7f464f73f1345453fa775c45d251a0e67256d905d545af
7
+ data.tar.gz: 8bff217952da08561b76038defe334f15f3b225e937b66813d576d6d3c614cb7fa0a3d99c0429a803e8f08e16085482200dd4c7726006bcadba968bdba066d55
data/lib/queries.rb ADDED
@@ -0,0 +1,5 @@
1
+ class Queries
2
+ def Queries.get_user
3
+ "query userByUsername($username: String!) {\n currentUser {\n id\n hasAchievementsGate: gate(feature: \"flag-achievements-v0\")\n __typename\n }\n user: userByUsername(username: $username) {\n id\n username\n fullName\n image\n url\n redirectToTeamDashboard\n ...ProfileHeaderUser\n __typename\n }\n}\n\nfragment ProfileHeaderUser on User {\n id\n fullName\n username\n image\n isLoggedIn\n bio\n karma\n isHacker\n roles {\n id\n name\n key\n tagline\n __typename\n }\n organization {\n id\n name\n __typename\n }\n languages {\n id\n key\n displayName\n tagline\n icon\n __typename\n }\n __typename\n}"
4
+ end
5
+ end
data/lib/repltalk.rb ADDED
@@ -0,0 +1,100 @@
1
+ require "http"
2
+ require "json"
3
+ require_relative "queries"
4
+
5
+ class Role
6
+ attr_reader :name, :key, :tagline
7
+
8
+ def initialize(role)
9
+ @name = role["name"]
10
+ @key = role["key"]
11
+ @tagline = role["tagline"]
12
+ end
13
+
14
+ def to_s
15
+ @name
16
+ end
17
+ end
18
+
19
+ class Language
20
+ attr_reader :id, :key, :name, :tagline, :icon
21
+
22
+ def initialize(lang)
23
+ @id = lang["id"]
24
+ @key = lang["key"]
25
+ @name = lang["displayName"]
26
+ @tagline = lang["tagline"]
27
+ @icon = lang["icon"]
28
+ end
29
+
30
+ def to_s
31
+ @id
32
+ end
33
+ end
34
+
35
+ class User
36
+ attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :roles, :languages
37
+
38
+ def initialize(user)
39
+ @id = user["id"]
40
+ @username = user["username"]
41
+ @name = user["fullName"]
42
+ @pfp = user["image"]
43
+ @bio = user["bio"]
44
+ @cycles = user["karma"]
45
+ @is_hacker = user["isHacker"]
46
+ @roles = user["roles"].map { |role| Role.new(role) }
47
+ @languages = user["languages"].map { |lang| Language.new(lang) }
48
+ end
49
+
50
+ def to_s
51
+ @username
52
+ end
53
+ end
54
+
55
+ class Client
56
+ attr_writer :sid
57
+
58
+ def initialize(sid=nil)
59
+ @sid = sid
60
+ end
61
+
62
+ def get_user(name)
63
+ u = graphql(
64
+ "userByUsername",
65
+ Queries.get_user,
66
+ username: name
67
+ )
68
+ User.new(u["user"])
69
+ end
70
+
71
+
72
+ private
73
+
74
+ def graphql(name, query, **variables)
75
+ payload = {
76
+ operationName: name,
77
+ query: query,
78
+ variables: variables.to_json
79
+ }
80
+ r = HTTP
81
+ .cookies(
82
+ "connect.sid": @sid
83
+ )
84
+ .headers(
85
+ referer: "https://repl.it/@CodingCactus/repltalk",
86
+ "X-Requested-With": "ReplTalk"
87
+ )
88
+ .post(
89
+ "https://repl.it/graphql",
90
+ form: payload
91
+ )
92
+ begin data = JSON.parse(r)
93
+ rescue
94
+ puts "\e[31mERROR\n#{r}\e[0m"
95
+ return nil
96
+ end
97
+ data = data["data"] if data.include?("data")
98
+ data
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: repltalk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - CodingCactus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: With the repltalk gem, you can easily interect with the repltalk graphql
14
+ api.
15
+ email: codingcactus.cc@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/queries.rb
21
+ - lib/repltalk.rb
22
+ homepage:
23
+ licenses: []
24
+ metadata:
25
+ source_code_uri: https://github.com/Codin-Cactus/repltalk
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.7.6
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A ruby client for the repltalk api
46
+ test_files: []