1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-16 03:44:26 +00:00
arikawa/utils/bot
diamondburned 54cadd2f45 gateway: Refactor for a better concurrent API
This commit refactors the whole package gateway as well as utils/ws
(formerly utils/wsutil) and voice/voicegateway. The new refactor
utilizes a design pattern involving a concurrent loop and an arriving
event channel.

An additional change was made to the way gateway events are typed.
Before, pretty much any type will satisfy a gateway event type, since
the actual type was just interface{}. The new refactor defines a
concrete interface that events can implement:

    type Event interface {
        Op() OpCode
        EventType() EventType
    }

Using this interface, the user can easily add custom gateway events
independently of the library without relying on string maps. This adds a
lot of type safety into the library and makes type-switching on Event
types much more reasonable.

Gateway error callbacks are also almost entirely removed in favor of
custom gateway events. A catch-all can easily be added like this:

    s.AddHandler(func(err error) {
        log.Println("gateway error:, err")
    })
2021-12-14 13:49:34 -08:00
..
_example/advanced_bot bot: Fix previous breaking change 2021-09-22 10:56:40 -07:00
extras gateway: Refactor for a better concurrent API 2021-12-14 13:49:34 -08:00
arguments.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
arguments_test.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
command.go gateway: Refactor for a better concurrent API 2021-12-14 13:49:34 -08:00
ctx.go gateway: Refactor for a better concurrent API 2021-12-14 13:49:34 -08:00
ctx_call.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
ctx_plumb_test.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
ctx_shard_test.go gateway: Refactor for a better concurrent API 2021-12-14 13:49:34 -08:00
ctx_test.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
error.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
error_test.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
README.md bot: Move bot to utils 2021-09-18 00:39:34 -07:00
subcommand.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00
subcommand_test.go bot: Move bot to utils 2021-09-18 00:39:34 -07:00

What are the performance impacts of this library?

Not a lot for a Discord bot:

THIS IS OUTDATED. TODO: UPDATE.

# Cold functions, or functions that are called once in runtime:
BenchmarkConstructor-8               	  150537	      7617 ns/op
BenchmarkSubcommandConstructor-8     	  155068	      7721 ns/op

# Hot functions, or functions that can be called multiple times:
BenchmarkCall-8                      	 1000000	      1194 ns/op
BenchmarkHelp-8                      	 1751619	       680 ns/op

# Hot functions, but called implicitly on non-message-create events:
BenchmarkReflectChannelID_1Level-8   	10111023	       113 ns/op
BenchmarkReflectChannelID_5Level-8   	 1872080	       686 ns/op