hc-arcade-js
v1.0.1
Published
JS/TS Library to access the Hack Club Arcade API
Downloads
2
Readme
Hack Club Arcade JS
This is a library to access the Hack Club Arcade API in TypeScript/JavaScript.
To get started, simply install the package, make a js/ts file, and create a client:
const hackclub = require('hc-arcade-js');
// OR
import * as hackclub from 'hc-arcade-js';
const client = new hackclub.Client({
slackID: 'Slack User ID',
APIKey: 'Hack Club API Key',
});
And you're set!
Usage
Types/Classes
ResData
{
ok: false;
error: string;
} | {
ok: true;
// More Data
}
SessionData
{
time: {
totalMins: number;
elapsedMins: number;
remainingMins: number;
createdAt: Date;
endAt: Date;
}
paused: boolean;
completed: boolean;
goal: string | null;
work: string;
}
Time
export default class Time {
constructor(ms: number);
getMS(): number;
getSeconds(): number;
getMinutes(): number;
getHours(): number;
getDays(): number;
getWeeks(): number;
getMonths(): number;
getTrueMonths(): number;
getYears(): number;
}
Methods
ping()
Returns a Promise
which resolves to the string "pong"
.
const res = await client.ping();
console.log(res);
// pong
getStatus()
Fetches the status of the hack club arcade.
Returns a Promise
which resolves with the status.
{
activeSessions: number;
airtableConnected: boolean;
slackConnected: boolean;
}
const status = await client.getStatus();
console.log(`There are ${status.activeSessions} sessions active!`);
// There are (x) sessions active!
getRemainingSessionTime(slackId?: string)
(DEPRECATED)
Fetches the amount of milliseconds left on the active session of a user, and also indicates if there is a session active. By default fetches the active user's session.
Returns a Promise
which resolves to a ResData
.
The data will either have active
as false
, or active
as true
and remainingMS
as the amount of milliseconds left.
{
active: false;
} | {
active: true;
remainingMS: number;
}
const status = await client.getRemainingSessionTime();
if (!status.ok) throw new Error(status.error);
if (status.active) console.log(`I have ${status.remainingMS / 1000 / 60} minutes left!`);
else console.log('I am not in an active session!');
getSessionData()
Fetches active session data of the current user.
Returns a Promise
which resolves to a ResData
.
The data will either have found
to false
and active
to false
if there is no active or recent session, or found
will be true and the data will fill in as below.
{
found: true;
active: boolean;
userID: string;
messageTs: string;
} & SessionData
const session = await client.getSessionData();
if (!session.ok) throw new Error(session.error);
if (session.active) console.log(`I have ${session.time.remainingMinsq} minutes left!`);
else console.log('I am not in an active session!');
getUserStats()
Fetches statistics of the current user.
Returns a Promise
which resolves to a ResData
.
{
sessions: number;
time: Time;
}
const stats = await client.getUserStats();
if (!stats.ok) throw new Error(stats.error);
console.log(`I have done ${stats.sessions} sessions and spent ${stats.time.getMinutes()} minutes on the Hack Club Arcade!`);
getUserGoals()
Fetches all goals and their data of the current user.
Returns a Promise
which resolves to a ResData
.
{
goals: Array<{
name: string;
time: Time;
}>;
}
const goals = await client.getUserGoals();
if (!goals.ok) throw new Error(goals.error);
console.log(`I have ${goals.length} total goals!`);
getSessionHistory()
Fetches the session history of the user.
Returns a Promise
which resolves to a ResData
.
| NOTE: This may not retrieve all sessions
{
sessions: Array<SessionData>;
}
const history = await client.getSessionHistory();
if (!history.ok) throw new Error(history.error);
console.log(`I have ${history.length} total sessions!`);
start(work: string)
Start a new session.
Returns a Promise
which resolves to a ResData
.
The data will either have created
set to false
in the case that there is an already active session, or created
will be set to true
and the data will fill in as below.
{
created: true;
session: {
id: string;
userID: string;
createdAt: Date;
}
}
const res = await client.start();
if (!res.ok) throw new Error(res.error);
if (res.created) console.log(`Created session ${res.session.id}`);
else console.log('Session already active!');
cancel()
Stops the current session.
Returns a Promise
which resolves to a ResData
.
The data will either have cancelled
set to false
in the case that there is no active session, or cancelled
will be set to true
and the data will fill in as below.
{
cancelled: true;
session: {
id: string;
userID: string;
createdAt: Date;
}
}
const res = await client.cancel();
if (!res.ok) throw new Error(res.error);
if (res.cancelled) console.log(`Cancelled session ${res.session.id}`);
else console.log('No active session!');
togglePaused()
Returns a Promise
which resolves to a ResData
.
The data will either have toggled
set to false
in the case that there is no active session, or toggled
will be set to true
and the data will fill in as below.
{
toggled: true;
session: {
id: string;
userID: string;
createdAt: Date;
paused: boolean;
}
}
const res = await client.togglePaused();
if (!res.ok) throw new Error(res.error);
if (res.toggled) console.log(`${res.session.paused ? 'Paused' : 'Unpaused'} the active session!`);
else console.log('No active session!');
Events
ratelimit
ratelimit(type: 'READ' | 'WRITE', info: RateLimitData): void;
Emitted whenever new ratelimit data is received, irrespective of if the ratelimit was hit or not.