Skip to content

Commit

Permalink
Merge pull request #22 from zekroTJA/dev
Browse files Browse the repository at this point in the history
added vote, profile and id command
  • Loading branch information
zekroTJA authored Jan 6, 2019
2 parents 929f481 + 978a7fc commit 7404899
Show file tree
Hide file tree
Showing 18 changed files with 784 additions and 34 deletions.
10 changes: 5 additions & 5 deletions cloc.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@

cloc|github.com/AlDanial/cloc v 1.74 T=1.00 s (43.0 files/s, 2667.0 lines/s)
cloc|github.com/AlDanial/cloc v 1.74 T=0.50 s (96.0 files/s, 6690.0 lines/s)
--- | ---

Language|files|blank|comment|code
:-------|-------:|-------:|-------:|-------:
Go|35|347|13|2127
Go|40|414|26|2692
Bourne Shell|4|18|2|50
Markdown|1|16|0|38
Markdown|1|18|0|44
SQL|1|6|0|43
YAML|2|4|0|28
SQL|1|3|0|21
--------|--------|--------|--------|--------
SUM:|43|388|15|2264
SUM:|48|460|28|2857
2 changes: 1 addition & 1 deletion commands/cmdhelp.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type CmdHelp struct {
}

func (c *CmdHelp) GetInvokes() []string {
return []string{"help", "h", "?"}
return []string{"help", "h", "?", "man"}
}

func (c *CmdHelp) GetDescription() string {
Expand Down
106 changes: 106 additions & 0 deletions commands/cmdid.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package commands

import (
"fmt"
"strings"
"time"

"github.com/bwmarrin/discordgo"
"github.com/zekroTJA/shinpuru/util"
)

type CmdId struct {
}

func (c *CmdId) GetInvokes() []string {
return []string{"id", "ids"}
}

func (c *CmdId) GetDescription() string {
return "Get the discord ID(s) by resolvable"
}

func (c *CmdId) GetHelp() string {
return "`id (<resolvable>)`"
}

func (c *CmdId) GetGroup() string {
return GroupEtc
}

func (c *CmdId) GetPermission() int {
return 0
}

func (c *CmdId) Exec(args *CommandArgs) error {
var user *discordgo.User
var role *discordgo.Role
var textChannel *discordgo.Channel
var voiceChannel *discordgo.Channel

if len(args.Args) < 1 {
user = args.User
} else {
joinedArgs := strings.Join(args.Args, " ")
if u, err := util.FetchMember(args.Session, args.Guild.ID, joinedArgs); err == nil {
user = u.User
}
if r, err := util.FetchRole(args.Session, args.Guild.ID, joinedArgs); err == nil {
role = r
}
if tc, err := util.FetchChannel(args.Session, args.Guild.ID, joinedArgs, func(c *discordgo.Channel) bool {
return c.Type == discordgo.ChannelTypeGuildText
}); err == nil {
textChannel = tc
}
if vc, err := util.FetchChannel(args.Session, args.Guild.ID, joinedArgs, func(c *discordgo.Channel) bool {
return c.Type == discordgo.ChannelTypeGuildVoice
}); err == nil {
voiceChannel = vc
}
}

if user == nil && role == nil && textChannel == nil && voiceChannel == nil {
msg, err := util.SendEmbedError(args.Session, args.Channel.ID,
"Could not fetch any member, role or channel by this resolvable.")
util.DeleteMessageLater(args.Session, msg, 8*time.Second)
return err
}

emb := &discordgo.MessageEmbed{
Color: util.ColorEmbedDefault,
Fields: make([]*discordgo.MessageEmbedField, 0),
}

if user != nil {
emb.Fields = append(emb.Fields, &discordgo.MessageEmbedField{
Name: "Member",
Value: fmt.Sprintf("<@%s> (%s#%s)\n```\n%s\n```", user.ID, user.Username, user.Discriminator, user.ID),
})
}
if role != nil {
emb.Fields = append(emb.Fields, &discordgo.MessageEmbedField{
Name: "Role",
Value: fmt.Sprintf("<@&%s> (%s)\n```\n%s\n```", role.ID, role.Name, role.ID),
})
}
if textChannel != nil {
emb.Fields = append(emb.Fields, &discordgo.MessageEmbedField{
Name: "Text Channel",
Value: fmt.Sprintf("<#%s> (%s)\n```\n%s\n```", textChannel.ID, textChannel.Name, textChannel.ID),
})
}
if voiceChannel != nil {
emb.Fields = append(emb.Fields, &discordgo.MessageEmbedField{
Name: "Voice Channel",
Value: fmt.Sprintf("%s\n```\n%s\n```", voiceChannel.Name, voiceChannel.ID),
})
}
emb.Fields = append(emb.Fields, &discordgo.MessageEmbedField{
Name: "Guild",
Value: fmt.Sprintf("%s\n```\n%s\n```", args.Guild.Name, args.Guild.ID),
})

_, err := args.Session.ChannelMessageSendEmbed(args.Channel.ID, emb)
return err
}
9 changes: 8 additions & 1 deletion commands/cmdinfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type CmdInfo struct {
}

func (c *CmdInfo) GetInvokes() []string {
return []string{"info", "information", "description", "credits", "version"}
return []string{"info", "information", "description", "credits", "version", "invite"}
}

func (c *CmdInfo) GetDescription() string {
Expand All @@ -31,6 +31,8 @@ func (c *CmdInfo) GetPermission() int {
}

func (c *CmdInfo) Exec(args *CommandArgs) error {
invLink := fmt.Sprintf("https://discordapp.com/api/oauth2/authorize?client_id=%s&scope=bot&permissions=%d",
args.Session.State.User.ID, util.InvitePermission)
emb := &discordgo.MessageEmbed{
Color: util.ColorEmbedDefault,
Title: "Info",
Expand All @@ -56,6 +58,11 @@ func (c *CmdInfo) Exec(args *CommandArgs) error {
Name: "Licence",
Value: "Covered by [MIT Licence](https://github.com/zekroTJA/shinpuru/blob/master/LICENCE).",
},
&discordgo.MessageEmbedField{
Name: "Invite",
Value: fmt.Sprintf("[Invite Link](%s).\n```\n%s\n```",
invLink, invLink),
},
&discordgo.MessageEmbedField{
Name: "Development state",
Value: "You can see current tasks [here](https://github.com/zekroTJA/shinpuru/projects).",
Expand Down
158 changes: 158 additions & 0 deletions commands/cmdprofile.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package commands

import (
"fmt"
"strings"
"time"

"github.com/bwmarrin/discordgo"

"github.com/zekroTJA/shinpuru/util"
)

type CmdProfile struct {
}

func (c *CmdProfile) GetInvokes() []string {
return []string{"user", "u", "profile"}
}

func (c *CmdProfile) GetDescription() string {
return "Get information about a user"
}

func (c *CmdProfile) GetHelp() string {
return "`profile (<userResolvable>)` - get user info"
}

func (c *CmdProfile) GetGroup() string {
return GroupEtc
}

func (c *CmdProfile) GetPermission() int {
return 0
}

func (c *CmdProfile) Exec(args *CommandArgs) error {
member, err := args.Session.GuildMember(args.Guild.ID, args.User.ID)
if err != nil {
return err
}
if len(args.Args) > 0 {
member, err = util.FetchMember(args.Session, args.Guild.ID, strings.Join(args.Args, " "))
if err != nil || member == nil {
msg, err := util.SendEmbedError(args.Session, args.Channel.ID,
"Could not fetch any member by the passed resolvable.")
util.DeleteMessageLater(args.Session, msg, 6*time.Second)
return err
}
}

membRoleIDs := make(map[string]struct{})
for _, rID := range member.Roles {
membRoleIDs[rID] = struct{}{}
}

maxPos := len(args.Guild.Roles)
roleColor := util.ColorEmbedGray
for _, guildRole := range args.Guild.Roles {
if _, ok := membRoleIDs[guildRole.ID]; ok && guildRole.Position < maxPos && guildRole.Color != 0 {
maxPos = guildRole.Position
roleColor = guildRole.Color
}
}

joinedTime, err := member.JoinedAt.Parse()
if err != nil {
return err
}
createdTime, err := util.GetDiscordSnowflakeCreationTime(member.User.ID)
if err != nil {
return err
}

permLvls, err := args.CmdHandler.db.GetGuildPermissions(args.Guild.ID)
if err != nil {
return err
}

permLvl := 0
if member.User.ID == args.CmdHandler.config.Discord.OwnerID {
permLvl = util.PermLvlBotOwner
} else if member.User.ID == args.Guild.OwnerID {
permLvl = util.PermLvlGuildOwner
} else {
permLvl, _ = permLvls[member.User.ID]
}

var repsOnRecord int
guildReps, err := args.CmdHandler.db.GetReportsGuild(args.Guild.ID)
if err != nil {
return err
}
for _, grep := range guildReps {
if grep.VictimID == member.User.ID {
repsOnRecord++
}
}
repsOnRecordStr := "This user has a white vest :ok_hand:"
if repsOnRecord > 0 {
repsOnRecordStr = fmt.Sprintf("This user has **%d** reports on record on this guild.", repsOnRecord)
}

roles := make([]string, len(member.Roles))
for i, rID := range member.Roles {
roles[i] = "<@&" + rID + ">"
}

embed := &discordgo.MessageEmbed{
Color: roleColor,
Title: fmt.Sprintf("Info about member %s#%s", member.User.Username, member.User.Discriminator),
Thumbnail: &discordgo.MessageEmbedThumbnail{
URL: member.User.AvatarURL(""),
},
Fields: []*discordgo.MessageEmbedField{
&discordgo.MessageEmbedField{
Inline: true,
Name: "Tag",
Value: member.User.Username + "#" + member.User.Discriminator,
},
&discordgo.MessageEmbedField{
Inline: true,
Name: "Nickname",
Value: util.EnsureNotEmpty(member.Nick, "*no nick*"),
},
&discordgo.MessageEmbedField{
Name: "ID",
Value: "```\n" + member.User.ID + "\n```",
},
&discordgo.MessageEmbedField{
Name: "Guild Joined",
Value: joinedTime.Format(time.RFC1123),
},
&discordgo.MessageEmbedField{
Name: "Account Created",
Value: createdTime.Format(time.RFC1123),
},
&discordgo.MessageEmbedField{
Name: "Permission Level",
Value: fmt.Sprintf("`%d`", permLvl),
},
&discordgo.MessageEmbedField{
Name: "Reports",
Value: repsOnRecordStr + "\n*Use `rep <user>` to list all reports of this user.*",
},
&discordgo.MessageEmbedField{
Name: "Roles",
Value: util.EnsureNotEmpty(strings.Join(roles, ", "), "*no roles assigned*"),
},
},
}

if member.User.Bot {
embed.Description = ":robot: **This is a bot account**"
}

_, err = args.Session.ChannelMessageSendEmbed(args.Channel.ID, embed)
return err
}
28 changes: 5 additions & 23 deletions commands/cmdtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package commands
import (
"fmt"

"github.com/bwmarrin/discordgo"
"github.com/zekroTJA/shinpuru/core"
"github.com/zekroTJA/shinpuru/util"
)

Expand Down Expand Up @@ -31,27 +31,9 @@ func (c *CmdTest) GetPermission() int {
}

func (c *CmdTest) Exec(args *CommandArgs) error {
filter := func(m *discordgo.Message) bool {
return m.Author.ID == args.User.ID && m.Content == "a"
}
options := &util.MessageCollectorOptions{
MaxMatches: 3,
DeleteMatchesAfter: true,
}
mc, err := util.NewMessageCollector(args.Session, args.Channel.ID, filter, options)
if err != nil {
return err
}

mc.OnColelcted(func(msg *discordgo.Message, c *util.MessageCollector) {
fmt.Println("Collected: ", msg.Content)
})
mc.OnMatched(func(msg *discordgo.Message, c *util.MessageCollector) {
fmt.Println("Matched: ", msg.Content)
})
mc.OnClosed(func(reason string, c *util.MessageCollector) {
fmt.Println(reason, len(c.CollectedMessages), len(c.CollectedMatches))
})

resp, _ := core.HTTPRequest("GET", util.DiscordAPIEndpoint+"/users/"+args.User.ID, map[string]string{
"Authorization": "Bot " + args.CmdHandler.config.Discord.Token,
}, nil)
fmt.Println(resp.BodyAsMap())
return nil
}
Loading

0 comments on commit 7404899

Please sign in to comment.