diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2017-05-11 21:18:24 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2017-05-11 21:18:31 +0200 |
| commit | f37c547a11b1102c8639219c532711b56a40103d (patch) | |
| tree | f1ffaea417084a22436a5430c9a4b2ed0fc023e9 | |
| parent | 01a0f341cd19247c9b3d47bf62edefcb0c1545bc (diff) | |
| download | discordbot-f37c547a11b1102c8639219c532711b56a40103d.tar.gz discordbot-f37c547a11b1102c8639219c532711b56a40103d.zip | |
add vgmember command
| -rw-r--r-- | commands/vainsocial/guild_member.js | 47 | ||||
| -rw-r--r-- | views/guild.js | 7 | ||||
| -rw-r--r-- | views/guild_member.js | 35 |
3 files changed, 86 insertions, 3 deletions
diff --git a/commands/vainsocial/guild_member.js b/commands/vainsocial/guild_member.js new file mode 100644 index 0000000..2a1bf27 --- /dev/null +++ b/commands/vainsocial/guild_member.js @@ -0,0 +1,47 @@ +#!/usr/bin/node +/* jshint esnext:true */ +"use strict"; + +const Commando = require("discord.js-commando"), + oneLine = require("common-tags").oneLine, + Promise = require("bluebird"), + api = require("../../api"), + util = require("../../util"), + GuildMemberView = require("../../views/guild_member"); + +module.exports = class ViewGuildMemberCommand extends Commando.Command { + constructor(client) { + super(client, { + name: "vainsocial-guildmember", + aliases: ["vguild-member", "vgm"], + group: "vainsocial-guild", + memberName: "vainsocial-guildmember", + description: "View a Guild member in detail.", + examples: ["vgm StormCallerSr"], + args: [ { + key: "name", + label: "name", + prompt: "Please specify a Guild member's name.", + type: "string", + min: 2, + default: "?" + } ] + }); + } + async run(msg, args) { + util.trackAction(msg, "vainsocial-guild-member"); + const guildMemberView = new GuildMemberView(msg); + try { + const guild = await api.getGuild(msg.author.id); + const member = guild.members.filter((m) => m.player.name == args.name)[0]; + if (member == undefined) + throw { err: { error: "Player is not in the Guild." } }; + const player = await api.getPlayer(member.player.name); + const matches = await api.getMatches(player.name); + await guildMemberView.respond(member, player, matches); + } catch (err) { + console.error(err); + return await guildMemberView.error(err.error.err); + } + } +}; diff --git a/views/guild.js b/views/guild.js index 6a8658b..91df6bb 100644 --- a/views/guild.js +++ b/views/guild.js @@ -3,20 +3,21 @@ "use strict"; const View = require("./view"), + GuildMemberView = require("./guild_member"), util = require("../util"), api = require("../api"), strings = require("../strings"), + Promise = require("bluebird"), oneLine = require("common-tags").oneLine; const GuildOverviewView = module.exports; // match detail view module.exports = class extends View { - async text(members) { + text(members) { // TODO remove when API supports order by fame members.sort((m1, m2) => m1.fame < m2.fame); - return members.map((member) => - `${member.player.name} *${member.status}* ${member.fame}`).join("\n"); + return members.map((m) => new GuildMemberView().text(m)).join("\n"); } async embed(guild) { diff --git a/views/guild_member.js b/views/guild_member.js new file mode 100644 index 0000000..d75ffe4 --- /dev/null +++ b/views/guild_member.js @@ -0,0 +1,35 @@ +#!/usr/bin/node +/* jshint esnext:true */ +"use strict"; + +const View = require("./view"), + PlayerView = require("./player"), + MatchesView = require("./matches"), + util = require("../util"), + api = require("../api"), + strings = require("../strings"), + oneLine = require("common-tags").oneLine; + +const GuildMemberView = module.exports; + +// combined fame + profile + last match +module.exports = class extends View { + text(member) { + return `${member.player.name} | ${member.status} | ${member.fame} VS Fame`; + } + + async embed(member, player, matches) { + const embed = util.vainsocialEmbed(`${member.player.name} - ${member.player.shard_id}`, + "", "vainsocial-guild-memberview") + .addField("Guild Profile", await this.text(member)) + .addField("Player Profile", await new PlayerView().text(player)) + .addField("Last Match", await new MatchesView().text(matches[0])); + return embed; + } + + async respond(member, player, matches) { + this.response = await util.respond(this.msg, + await this.embed(member, player, matches), this.response); + return this.response; + } +} |
