summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-05-11 21:18:24 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2017-05-11 21:18:31 +0200
commitf37c547a11b1102c8639219c532711b56a40103d (patch)
treef1ffaea417084a22436a5430c9a4b2ed0fc023e9
parent01a0f341cd19247c9b3d47bf62edefcb0c1545bc (diff)
downloaddiscordbot-f37c547a11b1102c8639219c532711b56a40103d.tar.gz
discordbot-f37c547a11b1102c8639219c532711b56a40103d.zip
add vgmember command
-rw-r--r--commands/vainsocial/guild_member.js47
-rw-r--r--views/guild.js7
-rw-r--r--views/guild_member.js35
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;
+ }
+}