repltalk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/queries.rb +5 -0
- data/lib/repltalk.rb +100 -0
- 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: []
|