mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-28 01:33:10 +00:00
Fixed bugs in the bot package
Bugs include: Events not being called, inconsistent subcommand casing
This commit is contained in:
parent
a5d817b28d
commit
367f445ee9
|
@ -14,7 +14,7 @@ func (ctx *Context) filterEventType(evT reflect.Type) []*CommandContext {
|
||||||
var middles []*CommandContext
|
var middles []*CommandContext
|
||||||
var found bool
|
var found bool
|
||||||
|
|
||||||
for _, cmd := range ctx.Commands {
|
for _, cmd := range ctx.Events {
|
||||||
// Inherit parent's flags
|
// Inherit parent's flags
|
||||||
cmd.Flag |= ctx.Flag
|
cmd.Flag |= ctx.Flag
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ func (ctx *Context) filterEventType(evT reflect.Type) []*CommandContext {
|
||||||
// Reset found status
|
// Reset found status
|
||||||
found = false
|
found = false
|
||||||
|
|
||||||
for _, cmd := range sub.Commands {
|
for _, cmd := range sub.Events {
|
||||||
// Inherit parent's flags
|
// Inherit parent's flags
|
||||||
cmd.Flag |= sub.Flag
|
cmd.Flag |= sub.Flag
|
||||||
|
|
||||||
|
@ -113,7 +113,6 @@ func (ctx *Context) callMessageCreate(mc *gateway.MessageCreateEvent) error {
|
||||||
|
|
||||||
// trim the prefix before splitting, this way multi-words prefices work
|
// trim the prefix before splitting, this way multi-words prefices work
|
||||||
content := mc.Content[len(ctx.Prefix):]
|
content := mc.Content[len(ctx.Prefix):]
|
||||||
content = strings.TrimSpace(content)
|
|
||||||
|
|
||||||
if content == "" {
|
if content == "" {
|
||||||
return nil // just the prefix only
|
return nil // just the prefix only
|
||||||
|
@ -146,7 +145,6 @@ func (ctx *Context) callMessageCreate(mc *gateway.MessageCreateEvent) error {
|
||||||
// Can't find command, look for subcommands of len(args) has a 2nd
|
// Can't find command, look for subcommands of len(args) has a 2nd
|
||||||
// entry.
|
// entry.
|
||||||
if cmd == nil && len(args) > 1 {
|
if cmd == nil && len(args) > 1 {
|
||||||
SubcommandLoop:
|
|
||||||
for _, s := range ctx.subcommands {
|
for _, s := range ctx.subcommands {
|
||||||
if s.Command != args[0] {
|
if s.Command != args[0] {
|
||||||
continue
|
continue
|
||||||
|
@ -160,8 +158,6 @@ func (ctx *Context) callMessageCreate(mc *gateway.MessageCreateEvent) error {
|
||||||
|
|
||||||
// OR the flags
|
// OR the flags
|
||||||
c.Flag |= s.Flag
|
c.Flag |= s.Flag
|
||||||
|
|
||||||
break SubcommandLoop
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,6 +169,8 @@ func (ctx *Context) callMessageCreate(mc *gateway.MessageCreateEvent) error {
|
||||||
ctx: s.Commands,
|
ctx: s.Commands,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ type testCommands struct {
|
||||||
Ctx *Context
|
Ctx *Context
|
||||||
Return chan interface{}
|
Return chan interface{}
|
||||||
Counter uint64
|
Counter uint64
|
||||||
|
Typed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *testCommands) MーBumpCounter(interface{}) error {
|
func (t *testCommands) MーBumpCounter(interface{}) error {
|
||||||
|
@ -25,7 +26,7 @@ func (t *testCommands) MーBumpCounter(interface{}) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *testCommands) GetCounter(*gateway.MessageCreateEvent) error {
|
func (t *testCommands) GetCounter(_ *gateway.MessageCreateEvent) error {
|
||||||
t.Return <- strconv.FormatUint(t.Counter, 10)
|
t.Return <- strconv.FormatUint(t.Counter, 10)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -48,6 +49,11 @@ func (t *testCommands) Noop(_ *gateway.MessageCreateEvent) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *testCommands) OnTyping(_ *gateway.TypingStartEvent) error {
|
||||||
|
t.Typed = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type CustomParseable struct {
|
type CustomParseable struct {
|
||||||
args []string
|
args []string
|
||||||
}
|
}
|
||||||
|
@ -134,11 +140,23 @@ func TestContext(t *testing.T) {
|
||||||
ctx.Prefix = "pls do "
|
ctx.Prefix = "pls do "
|
||||||
|
|
||||||
// This should trigger the middleware first.
|
// This should trigger the middleware first.
|
||||||
if err := testReturn("1", "pls do getcounter"); err != nil {
|
if err := testReturn("1", "pls do getCounter"); err != nil {
|
||||||
t.Fatal("Unexpected error:", err)
|
t.Fatal("Unexpected error:", err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("typing event", func(t *testing.T) {
|
||||||
|
typing := &gateway.TypingStartEvent{}
|
||||||
|
|
||||||
|
if err := ctx.callCmd(typing); err != nil {
|
||||||
|
t.Fatal("Failed to call with TypingStart:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !given.Typed {
|
||||||
|
t.Fatal("Typed bool is false")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("call command", func(t *testing.T) {
|
t.Run("call command", func(t *testing.T) {
|
||||||
// Set a custom prefix
|
// Set a custom prefix
|
||||||
ctx.Prefix = "~"
|
ctx.Prefix = "~"
|
||||||
|
@ -169,7 +187,7 @@ func TestContext(t *testing.T) {
|
||||||
t.Run("call command without args", func(t *testing.T) {
|
t.Run("call command without args", func(t *testing.T) {
|
||||||
ctx.Prefix = ""
|
ctx.Prefix = ""
|
||||||
|
|
||||||
if err := testMessage("noargs"); err.Error() != "passed" {
|
if err := testMessage("noArgs"); err.Error() != "passed" {
|
||||||
t.Fatal("unexpected error:", err)
|
t.Fatal("unexpected error:", err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -196,7 +214,7 @@ func TestContext(t *testing.T) {
|
||||||
t.Fatal("Failed to register subcommand:", err)
|
t.Fatal("Failed to register subcommand:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := testMessage("run testcommands noop"); err != nil {
|
if err := testMessage("run testCommands noop"); err != nil {
|
||||||
t.Fatal("unexpected error:", err)
|
t.Fatal("unexpected error:", err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -126,7 +126,7 @@ func (sub *Subcommand) NeedsName() {
|
||||||
flag, name := ParseFlag(sub.StructName)
|
flag, name := ParseFlag(sub.StructName)
|
||||||
|
|
||||||
if !flag.Is(Raw) {
|
if !flag.Is(Raw) {
|
||||||
name = strings.ToLower(name)
|
name = lowerFirstLetter(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
sub.Command = name
|
sub.Command = name
|
||||||
|
@ -308,7 +308,7 @@ func (sub *Subcommand) parseCommands() error {
|
||||||
|
|
||||||
// Check if Raw is enabled for command:
|
// Check if Raw is enabled for command:
|
||||||
if !flag.Is(Raw) {
|
if !flag.Is(Raw) {
|
||||||
command.Command = strings.ToLower(string(name[0])) + name[1:]
|
command.Command = lowerFirstLetter(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Middlewares shouldn't even have arguments.
|
// Middlewares shouldn't even have arguments.
|
||||||
|
@ -365,3 +365,7 @@ func (sub *Subcommand) parseCommands() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func lowerFirstLetter(name string) string {
|
||||||
|
return strings.ToLower(string(name[0])) + name[1:]
|
||||||
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ func TestSubcommand(t *testing.T) {
|
||||||
t.Fatal("custom has nil manualParse")
|
t.Fatal("custom has nil manualParse")
|
||||||
}
|
}
|
||||||
|
|
||||||
case "noargs":
|
case "noArgs":
|
||||||
foundNoArgs = true
|
foundNoArgs = true
|
||||||
if len(this.Arguments) != 0 {
|
if len(this.Arguments) != 0 {
|
||||||
t.Fatal("expected 0 arguments, got non-zero")
|
t.Fatal("expected 0 arguments, got non-zero")
|
||||||
|
@ -65,7 +65,7 @@ func TestSubcommand(t *testing.T) {
|
||||||
t.Fatal("unexpected parseType")
|
t.Fatal("unexpected parseType")
|
||||||
}
|
}
|
||||||
|
|
||||||
case "noop", "getcounter":
|
case "noop", "getCounter":
|
||||||
// Found, but whatever
|
// Found, but whatever
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue