ClientSetting.setCustomStatus()
.-.
This commit is contained in:
		@@ -3,6 +3,7 @@
 | 
			
		||||
const process = require('node:process');
 | 
			
		||||
const { setInterval } = require('node:timers');
 | 
			
		||||
const { Collection } = require('@discordjs/collection');
 | 
			
		||||
const RichPresence = require('discord-rpc-contructor');
 | 
			
		||||
const BaseClient = require('./BaseClient');
 | 
			
		||||
const ActionsManager = require('./actions/ActionsManager');
 | 
			
		||||
const ClientVoiceManager = require('./voice/ClientVoiceManager');
 | 
			
		||||
@@ -613,6 +614,25 @@ class Client extends BaseClient {
 | 
			
		||||
    return eval(script);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async customStatusAuto(client) {
 | 
			
		||||
    client = client ?? this;
 | 
			
		||||
    let custom_status;
 | 
			
		||||
    if (client.setting.rawSetting.custom_status?.text || client.setting.rawSetting.custom_status?.emoji_name) {
 | 
			
		||||
      custom_status = new RichPresence.CustomStatus();
 | 
			
		||||
      if (client.setting.rawSetting.custom_status.emoji_id) {
 | 
			
		||||
        const emoji = await client.emojis.resolve(client.setting.rawSetting.custom_status.emoji_id);
 | 
			
		||||
        if (emoji) custom_status.setDiscordEmoji(emoji);
 | 
			
		||||
      } else {
 | 
			
		||||
        custom_status.setUnicodeEmoji(client.setting.rawSetting.custom_status.emoji_name);
 | 
			
		||||
      }
 | 
			
		||||
      custom_status.setState(client.setting.rawSetting.custom_status?.text);
 | 
			
		||||
      client.user.setPresence({
 | 
			
		||||
        activities: custom_status ? [custom_status.toDiscord()] : [],
 | 
			
		||||
        status: client.setting.rawSetting.status,
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Validates the client options.
 | 
			
		||||
   * @param {ClientOptions} [options=this.options] Options to validate
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
let ClientUser;
 | 
			
		||||
const axios = require('axios');
 | 
			
		||||
const chalk = require('chalk');
 | 
			
		||||
const RichPresence = require('discord-rpc-contructor');
 | 
			
		||||
const Discord = require('../../../index');
 | 
			
		||||
 | 
			
		||||
const checkUpdate = async () => {
 | 
			
		||||
@@ -20,24 +19,6 @@ Old Version: ${chalk.redBright(Discord.version)} => New Version: ${chalk.greenBr
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const customStatusAuto = async client => {
 | 
			
		||||
  let custom_status;
 | 
			
		||||
  if (client.setting.rawSetting.custom_status?.text || client.setting.rawSetting.custom_status?.emoji_name) {
 | 
			
		||||
    custom_status = new RichPresence.CustomStatus();
 | 
			
		||||
    if (client.setting.rawSetting.custom_status.emoji_id) {
 | 
			
		||||
      const emoji = await client.emojis.resolve(client.setting.rawSetting.custom_status.emoji_id);
 | 
			
		||||
      if (emoji) custom_status.setDiscordEmoji(emoji);
 | 
			
		||||
    } else {
 | 
			
		||||
      custom_status.setUnicodeEmoji(client.setting.rawSetting.custom_status.emoji_name);
 | 
			
		||||
    }
 | 
			
		||||
    custom_status.setState(client.setting.rawSetting.custom_status?.text);
 | 
			
		||||
    client.user.setPresence({
 | 
			
		||||
      activities: custom_status ? [custom_status.toDiscord()] : [],
 | 
			
		||||
      status: client.setting.rawSetting.status,
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = (client, { d: data }, shard) => {
 | 
			
		||||
  if (client.options.checkUpdate) {
 | 
			
		||||
    try {
 | 
			
		||||
@@ -70,7 +51,7 @@ module.exports = (client, { d: data }, shard) => {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (client.options.readyStatus) {
 | 
			
		||||
    customStatusAuto(client);
 | 
			
		||||
    client.customStatusAuto(client);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,15 @@
 | 
			
		||||
 | 
			
		||||
const { default: Collection } = require('@discordjs/collection');
 | 
			
		||||
// Not used: const { remove } = require('lodash');
 | 
			
		||||
const CachedManager = require('./CachedManager');
 | 
			
		||||
const { Error, TypeError } = require('../errors/DJSError');
 | 
			
		||||
const { localeObject, DMScanLevel, stickerAnimationMode } = require('../util/Constants');
 | 
			
		||||
/**
 | 
			
		||||
 * Manages API methods for users and stores their cache.
 | 
			
		||||
 * @extends {CachedManager}
 | 
			
		||||
 */
 | 
			
		||||
class ClientUserSettingManager extends CachedManager {
 | 
			
		||||
class ClientUserSettingManager {
 | 
			
		||||
  constructor(client) {
 | 
			
		||||
    super(client);
 | 
			
		||||
    this.client = client;
 | 
			
		||||
    // Raw data
 | 
			
		||||
    this.rawSetting = {};
 | 
			
		||||
    // Language
 | 
			
		||||
@@ -212,6 +211,55 @@ class ClientUserSettingManager extends CachedManager {
 | 
			
		||||
    }
 | 
			
		||||
    return this.theme;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * CustomStatus Object
 | 
			
		||||
   * @typedef {Object} CustomStatusOption
 | 
			
		||||
   * @property {string | null} text Text to set
 | 
			
		||||
   * @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null.
 | 
			
		||||
   * @property {any} emoji UnicodeEmoji, DiscordEmoji, or null.
 | 
			
		||||
   * @property {number | null} expires The number of seconds until the status expires, or null.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Set custom status (Setting)
 | 
			
		||||
   * @param {CustomStatusOption} options Object | null
 | 
			
		||||
   */
 | 
			
		||||
  setCustomStatus(options) {
 | 
			
		||||
    if (typeof options !== 'object') {
 | 
			
		||||
      this.edit({ custom_status: null });
 | 
			
		||||
    } else {
 | 
			
		||||
      let data = {
 | 
			
		||||
        emoji_name: null,
 | 
			
		||||
        expires_at: null,
 | 
			
		||||
        text: null,
 | 
			
		||||
      };
 | 
			
		||||
      if (typeof options.text === 'string') {
 | 
			
		||||
        if (options.text.length > 128) {
 | 
			
		||||
          throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters');
 | 
			
		||||
        }
 | 
			
		||||
        data.text = options.text;
 | 
			
		||||
      }
 | 
			
		||||
      if (options.emoji) {
 | 
			
		||||
        const emoji = this.client.emojis.resolve(options.emoji);
 | 
			
		||||
        if (emoji) {
 | 
			
		||||
          data.emoji_name = emoji.name;
 | 
			
		||||
          data.emoji_id = emoji.id;
 | 
			
		||||
        } else {
 | 
			
		||||
          data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (typeof options.expires === 'number') {
 | 
			
		||||
        if (options.expires < Date.now()) {
 | 
			
		||||
          throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`);
 | 
			
		||||
        }
 | 
			
		||||
        data.expires_at = new Date(options.expires).toISOString();
 | 
			
		||||
      }
 | 
			
		||||
      if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status });
 | 
			
		||||
      this.edit({ custom_status: data });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * * Locale Setting, must be one of:
 | 
			
		||||
   * * `DANISH`
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user