152 lines
5.6 KiB
JavaScript
152 lines
5.6 KiB
JavaScript
var discordSdk, discordEvents, discordPriceUtils;
|
|
var discordCallbacks = {
|
|
registerCallback: function(key, obj) {
|
|
console.log("[DiscordHTML] registerCallback: " + key);
|
|
this[key] = obj;
|
|
}
|
|
};
|
|
window["discordCallbacks"] = discordCallbacks;
|
|
async function initializeDiscord(oauth_client_id) {
|
|
console.log("[DiscordHTML] initializeDiscord() " + oauth_client_id);
|
|
try {
|
|
console.log("[DiscordHTML] initializeDiscord()");
|
|
const { DiscordSDK, Events, PriceUtils } = await import('./extras/activity-iframe-sdk/output/index.mjs');
|
|
// console.log(DiscordSDK);
|
|
discordSdk = new DiscordSDK(oauth_client_id);
|
|
discordEvents = Events;
|
|
discordPriceUtils = PriceUtils;
|
|
console.log("[DiscordHTML] initializeDiscord() awaiting ready()");
|
|
// Wait for READY payload from the discord client
|
|
await discordSdk.ready();
|
|
|
|
console.log("[DiscordHTML] initializeDiscord() ready()");
|
|
console.log (JSON.stringify(discordCallbacks));
|
|
console.log(discordCallbacks);
|
|
console.log(discordCallbacks.on_discordReady);
|
|
discordCallbacks.on_discordReady(true);
|
|
} catch(error) {
|
|
console.error('[DiscordHTMl] initializeDiscord() error: ' + error);
|
|
discordCallbacks.on_discordReady(); // empty is error
|
|
}
|
|
}
|
|
|
|
async function authorizeDiscord(oauth_client_id) {
|
|
console.log("[DiscordHTML] authorizeDiscord() " + oauth_client_id);
|
|
try {
|
|
// Pop open the OAuth permission modal and request for access to scopes listed in scope array below
|
|
console.log("[DiscordHTML] authorizeDiscord() authorizing.");
|
|
const {code} = await discordSdk.commands.authorize({
|
|
client_id: oauth_client_id,
|
|
response_type: 'code',
|
|
state: '',
|
|
prompt: 'none',
|
|
scope: ['identify', 'guilds.members.read'],
|
|
});
|
|
console.log("[DiscordHTML] authorized. code " + code);
|
|
discordCallbacks.on_discordAuthorized(code);
|
|
} catch(error) {
|
|
console.error('[DiscordHTMl] authorizeDiscord() error: ' + error + ' stringified error: ' + JSON.stringify(error));
|
|
discordCallbacks.on_discordAuthorized(); // empty is error
|
|
discordSdk.close(1000, "Unauthorized")
|
|
}
|
|
};
|
|
|
|
async function authenticateDiscord(access_token) {
|
|
console.log("[DiscordHTML] authenticateDiscord()");
|
|
// Authenticate with Discord client (using the access_token)
|
|
try {
|
|
var user = await discordSdk.commands.authenticate({access_token});
|
|
var userJson = JSON.stringify(user);
|
|
console.log("[DiscordHTML] authenticated. user: " + userJson);
|
|
discordCallbacks.on_discordAuthenticated(userJson);
|
|
discordConnectParticipantsChanged();
|
|
discordConnectPurchaseCallback();
|
|
//discordLoadSkus();
|
|
} catch (error) {
|
|
console.error("[DiscordHTML] authenticateDiscord() error: " + error);
|
|
discordCallbacks.on_discordAuthenticated(); // empty is error
|
|
}
|
|
};
|
|
|
|
function discordOpenURL(url) {
|
|
console.log("[DiscordHTML] discordOpenURL " + url);
|
|
discordSdk.commands.openExternalLink({url:url})
|
|
};
|
|
|
|
function discordUpdateParticipants(participants) {
|
|
console.log("[Discord] discordUpdateParticipants");
|
|
var participantsJsonString = JSON.stringify(participants);
|
|
console.log("[Discord] participants: " + participantsJsonString);
|
|
discordCallbacks.on_discordParticipantsChanged(participantsJsonString);
|
|
}
|
|
|
|
async function discordGetParticipants() {
|
|
console.log("[DiscordHTML] discordGetInstanceConnectedParticipants()");
|
|
try {
|
|
var participantData = await discordSdk.commands.getInstanceConnectedParticipants();
|
|
discordUpdateParticipants(participantData);
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordGetInstanceConnectedParticipants() error " + error);
|
|
}
|
|
return []
|
|
};
|
|
|
|
function discordConnectParticipantsChanged() {
|
|
try {
|
|
console.log("[DiscordHTML] discordConnectParticipantsChanged() subscribing to participants update");
|
|
discordSdk.subscribe(discordEvents.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE, discordUpdateParticipants);
|
|
console.log("[DiscordHTML] discordConnectParticipantsChanged() subscribed to participants update");
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordConnectParticipantsChanged() error processing participants: " + JSON.stringify(error));
|
|
}
|
|
}
|
|
|
|
function discordQueryPurchases() {
|
|
try {
|
|
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordQueryPurchases() error " + error);
|
|
}
|
|
}
|
|
|
|
function discordConnectPurchaseCallback() {
|
|
try {
|
|
console.log("[DiscordHTML] discordConnectPurchaseCallback()");
|
|
discordSdk.subscribe('ENTITLEMENT_CREATE', () =>{
|
|
console.log("[DiscordHTML] discord purchaseCallback()");
|
|
discordCallbacks.on_purchaseCallback();
|
|
});
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordConnectPurchaseCallback() error: " + error);
|
|
}
|
|
}
|
|
|
|
async function discordLoadSkus() {
|
|
try {
|
|
console.log("[DiscordHTML] discordLoadSkus()");
|
|
const skus = await discordSdk.commands.getSkus();
|
|
// console.log("[DiscordHTML] skus: " + skus);
|
|
skus.skus.forEach(skuInfo => {
|
|
// console.log("[DiscordHTML] formatting price: " + skuInfo.price);
|
|
var formattedPrice = discordPriceUtils.formatPrice(skuInfo.price);
|
|
// console.log("[DiscordHTML] formated to: " + formattedPrice);
|
|
skuInfo.formatted_price = formattedPrice;
|
|
})
|
|
const skusJson = JSON.stringify(skus);
|
|
// console.log("[DiscordHTML] skus jsonified: " + JSON.stringify(skus));
|
|
discordCallbacks.on_skusLoaded(skusJson);
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordLoadSkus() error: " + error);
|
|
}
|
|
}
|
|
|
|
async function discordPurchaseSku(sku) {
|
|
try {
|
|
console.log("[DiscordHTML] discordPurchaseSku(" + sku + ")");
|
|
await discordSdk.commands.startPurchase({sku_id: sku});
|
|
console.log("[DiscordHTML] discordPurchaseSku(" + sku + ") finished");
|
|
} catch (error) {
|
|
console.log("[DiscordHTML] discordPurchaseSku(" + sku + ") error: " + error + " error json: " + JSON.stringify(error));
|
|
}
|
|
}
|