import { Message, PrivateChannel, GroupChannel } from 'eris'; import uuid from 'uuid/v4'; import { Client } from '..'; import { Command, RichEmbed } from '../class'; export default class CreateAccount extends Command { constructor(client: Client) { super(client); this.name = 'createaccount'; this.description = 'Create an account on the Cloud VM'; this.usage = `${this.client.config.prefix}createaccount [User ID] [Email] [Account name]`; this.aliases = ['createacc', 'cacc', 'caccount', 'create']; this.permissions = { roles: ['475817826251440128', '525441307037007902'] }; this.enabled = true; } /* args[0] is the user ID args[1] is the email args[2] is the username of the account to be created */ public async run(message: Message, args: string[]) { try { if (message.channel instanceof PrivateChannel || message.channel instanceof GroupChannel) return message; // Stop TS being gay if (!args[2]) return this.client.commands.get('help').run(message, [this.name]); if (!message.channel.guild.members.has(args[0])) return message.channel.createMessage(`${this.client.stores.emojis.error} ***User not found***`); if (message.channel.guild.members.get(args[0]).bot) return message.channel.createMessage(`${this.client.stores.emojis.error} ***I cannot create accounts for bots***`); const checkUser = await this.client.db.Account.findOne({ userID: args[0] }); if (checkUser) return message.channel.createMessage(`${this.client.stores.emojis.error} ***<@${args[0]}> already has an account***`); const checkEmail = await this.client.db.Account.findOne({ emailAddress: args[1] }); if (checkEmail) return message.channel.createMessage(`${this.client.stores.emojis.error} ***Account already exists with this email address***`); const checkAccount = await this.client.db.Account.findOne({ username: args[2] }); if (checkAccount) return message.channel.createMessage(`${this.client.stores.emojis.error} ***Account already exists with this username***`); if (!this.client.util.isValidEmail(args[1])) return message.channel.createMessage(`${this.client.stores.emojis.error} ***Invalid email address supplied***`); if (!/^[a-z][-a-z0-9]*$/.test(args[2])) return message.channel.createMessage(`${this.client.stores.emojis.error} ***Invalid username supplied***`); const confirmation = await message.channel.createMessage(`${this.client.stores.emojis.loading} ***Creating account...***`); const tempPass = this.client.util.randomPassword(); let passHash = await this.client.util.createHash(tempPass); passHash = passHash.replace(/[$]/g, '\\$').replace('\n', ''); const acctName = this.client.users.get(args[0]).username.replace(/[!@#$%^&*(),.?":{}|<>]/g, '-').replace(/\s/g, '-'); const etcPasswd = `${acctName},${args[0]},,`; await this.client.util.createAccount(passHash, etcPasswd, args[2], args[0], args[1], message.author.id); await this.client.util.createModerationLog(args[0], message.member, 0); /* const log = await new this.client.db.Moderation({ username: args[2], userID: args[0], logID: uuid(), moderatorID: message.author.id, reason: 'User requested account creation', type: 0, date: new Date(), }); await log.save(); const embed = new RichEmbed(); embed.setTitle('Cloud Account | Create'); embed.setColor('00ff00'); embed.addField('User', `${args[2]} | <@${args[0]}>`); embed.addField('Engineer', `<@${message.author.id}>`, true); embed.addField('Reason', 'User requested account creation'); embed.setFooter(this.client.user.username, this.client.user.avatarURL); embed.setTimestamp(); // @ts-ignore this.client.createMessage('580950455581147146', { embed }); */ this.client.util.transport.sendMail({ to: args[1], from: 'Library of Code sp-us | Cloud Services ', subject: 'Your account has been created', html: `

Library of Code | Cloud Services

Your Cloud Account has been created, welcome! Please see below for some details regarding your account and our services

Username: ${args[2]}

SSH Login:

ssh ${args[2]}@cloud.libraryofcode.org

Email address (see below for further information): ${args[2]}@cloud.libraryofcode.org

Useful information

How to log in:

  1. Open your desired terminal application - we recommend using Bash, but you can use your computer's default
  2. Type in your SSH Login as above
  3. When prompted, enter your password Please note that inputs will be blank, so be careful not to type in your password incorrectly

If you fail to authenticate yourself too many times, you will be IP banned and will fail to connect. If this is the case, feel free to DM Ramirez with your public IPv4 address.

Setting up your cloud email

All email applications are different, so here are some information you can use to connect your email

Channels and Links

Want to support us?

You can support us on Patreon! Head to our Patreon page and feel free to donate as much or as little as you want!
Donating $5 or more will grant you Tier 3, which means we will manage your account at your request, longer certificates, increased Tier limits as well as some roles in the server!

Library of Code sp-us | Support Team `, }); const dmChannel = await this.client.getDMChannel(args[0]).catch(); dmChannel.createMessage('<:loc:607695848612167700> **Thank you for creating an account with us!** <:loc:607695848612167700>\n' + `Please log into your account by running \`ssh ${args[2]}@cloud.libraryofcode.org\` in your terminal, then use the password \`${tempPass}\` to log in.\n` + `You will be asked to change your password, \`(current) UNIX password\` is \`${tempPass}\`, then create a password that is at least 12 characters long, with at least one number, special character, and an uppercase letter\n` + 'Bear in mind that when you enter your password, it will be blank, so be careful not to type in your password incorrectly.\n' + 'You may now return to Modmail, and continue setting up your account from there.\n\n' + 'An email containing some useful information has also been sent').catch(); return confirmation.edit(`${this.client.stores.emojis.success} ***Account successfully created***\n**Username:** \`${args[2]}\`\n**Temporary Password:** \`${tempPass}\``); } catch (error) { return this.client.util.handleError(error, message, this); } } }