Skip to content

Commit

Permalink
New info command & add timestamps to read
Browse files Browse the repository at this point in the history
  • Loading branch information
Mnpn committed Aug 13, 2019
1 parent f13cdda commit e6d5692
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 81 deletions.
4 changes: 3 additions & 1 deletion commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -652,6 +652,8 @@ func commandRaw(session *discordgo.Session, source commandSource, cmd string, ar
stdutil.PrintErr(tl("failed.react"), err)
}
}
default:
stdutil.PrintErr("react add/del <message id> <emoji unicode/id> OR react big <message id> <text>", nil)
}
case "block":
if nargs < 1 {
Expand Down Expand Up @@ -779,7 +781,7 @@ func commandRaw(session *discordgo.Session, source commandSource, cmd string, ar
cacheUser = nil
case "avatar", "name", "playing", "streaming", "typing", "nick", "status", "game":
returnVal = commandsUserMod(session, cmd, args, nargs, w)
case "read", "cinfo", "ginfo", "uinfo":
case "read", "info":
returnVal = commandsQuery(session, cmd, args, nargs, w)
case "role":
returnVal = commandsRoles(session, cmd, args, nargs, w)
Expand Down
135 changes: 72 additions & 63 deletions commands_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,90 +107,99 @@ func commandsQuery(session *discordgo.Session, cmd string, args []string, nargs
if returnVal != "" {
writeln(w, returnVal)
}
case "cinfo":
if loc.channel == nil {
stdutil.PrintErr(tl("invalid.channel"), nil)
case "info":
if nargs < 1 {
stdutil.PrintErr("info <user/guild/channel> (for user: <id/@me>) [property] (or info u/g/c)", nil)
return
}
switch strings.ToLower(args[0]) {
case "channel", "c":
if loc.channel == nil {
stdutil.PrintErr(tl("invalid.channel"), nil)
return
}

values := chan2array(loc.channel)
values := chan2array(loc.channel)

if nargs < 1 {
for _, keyval := range values {
writeln(w, keyval.String())
if nargs < 2 {
for _, keyval := range values {
writeln(w, keyval.String())
}
} else {
var ok bool
returnVal, ok = findValByKey(values, args[1])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
return
}

writeln(w, returnVal)
}
} else {
var ok bool
returnVal, ok = findValByKey(values, args[0])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
case "guild", "g":
if loc.guild == nil {
stdutil.PrintErr(tl("invalid.guild"), nil)
return
}

writeln(w, returnVal)
}
case "ginfo":
if loc.guild == nil {
stdutil.PrintErr(tl("invalid.guild"), nil)
return
}
values := guild2array(loc.guild)

values := guild2array(loc.guild)
if nargs < 2 {
for _, keyval := range values {
writeln(w, keyval.String())
}
} else {
var ok bool
returnVal, ok = findValByKey(values, args[1])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
return
}

if nargs < 1 {
for _, keyval := range values {
writeln(w, keyval.String())
writeln(w, returnVal)
}
} else {
var ok bool
returnVal, ok = findValByKey(values, args[0])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
case "user", "u":
if nargs < 2 {
stdutil.PrintErr("info user/u <id/@me> [property]", nil)
return
}
id := args[1]
var keyvals []*keyval

writeln(w, returnVal)
}
case "uinfo":
if nargs < 1 {
stdutil.PrintErr("uinfo <id> [property]", nil)
return
}
id := args[0]
var keyvals []*keyval
if strings.EqualFold(id, "cache") {
if cacheUser == nil {
stdutil.PrintErr(tl("invalid.cache"), nil)
return
}

if strings.EqualFold(id, "cache") {
if cacheUser == nil {
stdutil.PrintErr(tl("invalid.cache"), nil)
return
}
keyvals = cacheUser
} else {

keyvals = cacheUser
} else {
user, err := session.User(id)
if err != nil {
stdutil.PrintErr(tl("failed.user"), err)
return
}

user, err := session.User(id)
if err != nil {
stdutil.PrintErr(tl("failed.user"), err)
return
keyvals = user2array(user)
cacheUser = keyvals
}

keyvals = user2array(user)
cacheUser = keyvals
}
if nargs < 3 {
for _, keyval := range keyvals {
writeln(w, keyval.String())
}
} else {
var ok bool
returnVal, ok = findValByKey(keyvals, args[2])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
return
}

if nargs < 2 {
for _, keyval := range keyvals {
writeln(w, keyval.String())
writeln(w, returnVal)
}
} else {
var ok bool
returnVal, ok = findValByKey(keyvals, args[1])
if !ok {
stdutil.PrintErr(tl("invalid.value"), nil)
return
}

writeln(w, returnVal)
default:
stdutil.PrintErr("info <user/guild/channel> (for user: <id/@me>) [property] (or info u/g/c)", nil)
}
}
return
Expand Down
60 changes: 46 additions & 14 deletions completer.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,20 +57,52 @@ func setCompleter(rl *readline.Instance) {
readline.PcItem("go", readline.PcItemDynamic(bookmarkTab)),

readline.PcItem("read", readline.PcItemDynamic(singleValue(&lastUsedMsg))),
readline.PcItem("cinfo",
readline.PcItem("guild"),
readline.PcItem("name"),
readline.PcItem("topic"),
readline.PcItem("type"),
),
readline.PcItem("ginfo",
readline.PcItem("name"),
readline.PcItem("icon"),
readline.PcItem("region"),
readline.PcItem("owner"),
readline.PcItem("splash"),
readline.PcItem("members"),
readline.PcItem("level"),
readline.PcItem("info",
readline.PcItem("channel",
readline.PcItem("id"),
readline.PcItem("guild"),
readline.PcItem("name"),
readline.PcItem("topic"),
readline.PcItem("type"),
readline.PcItem("nsfw"),
readline.PcItem("\"parent category\""),
readline.PcItem("\"last message\""),
readline.PcItem("bitrate"),
readline.PcItem("\"user limit\""),
),
readline.PcItem("guild",
readline.PcItem("id"),
readline.PcItem("name"),
readline.PcItem("icon"),
readline.PcItem("region"),
readline.PcItem("owner"),
readline.PcItem("\"join messages\""),
readline.PcItem("\"widget channel\""),
readline.PcItem("\"afk channel\""),
readline.PcItem("\"afk timeout\""),
readline.PcItem("members"),
readline.PcItem("verification"),
readline.PcItem("\"admin mfa\""),
readline.PcItem("\"explicit content filter\""),
readline.PcItem("unavailable"),
),
// only @me gets autocomplete for the rest,
// idk how i can make it efficiently work for both.
readline.PcItem("user",
readline.PcItem("@me",
readline.PcItem("id"),
readline.PcItem("email"),
readline.PcItem("name"),
readline.PcItem("discrim"),
readline.PcItem("locale"),
readline.PcItem("avatar"),
readline.PcItem("\"avatar url\""),
readline.PcItem("verified"),
readline.PcItem("\"mfa enabled\""),
readline.PcItem("bot"),
),
readline.PcItem("<id>"),
),
),
readline.PcItem("messages",
readline.PcItem("all"),
Expand Down
4 changes: 1 addition & 3 deletions help.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ func printHelp(search string) {
help = append(help, "")
help = append(help, "region <list/set> (<region>)\tSet current guild region.")
help = append(help, "")
help = append(help, "cinfo [property]\tGet information about channel.")
help = append(help, "ginfo [property]\tGet information about guild. Properties: name, icon, region, owner, splash, members, level")
help = append(help, "uinfo <id> [property]\tGet information about user. Properties: id, email, name, avatar, bot; 'cache' may be used as message ID")
help = append(help, "info <user/guild/channel> (for user: <id/@me>) [property] (or info u/g/c)\tGet information about a user, server or channel!")
help = append(help, "read <message id> [property]\tRead or get info from a message. Properties: (empty), text, channel, timestamp, author, "+
"author_email, author_name, author_avatar, author_bot, embed; 'cache' may be used as message ID.")
help = append(help, "pin <message id>\tPin a message to the current channel.")
Expand Down
4 changes: 4 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,10 @@ func printMessage(session *discordgo.Session, msg *discordgo.Message, prefixR bo
if prefixR {
s += "\r"
}
t, err := timestamp(msg)
if err == nil {
s += t + " - "
}
s += "("

if isPrivate(channel) {
Expand Down

0 comments on commit e6d5692

Please sign in to comment.