8 "layeh.com/gumble/gumble"
9 "layeh.com/gumble/gumbleopenal"
10 "layeh.com/gumble/gumbleutil"
13 func (b *Barnard) start() {
14 b.Config.Attach(gumbleutil.AutoBitrate)
18 _, err = gumble.DialWithDialer(new(net.Dialer), b.Address, b.Config, &b.TLSConfig)
20 fmt.Fprintf(os.Stderr, "%s\n", err)
25 if os.Getenv("ALSOFT_LOGLEVEL") == "" {
26 os.Setenv("ALSOFT_LOGLEVEL", "0")
28 if stream, err := gumbleopenal.New(b.Client); err != nil {
29 fmt.Fprintf(os.Stderr, "%s\n", err)
36 func (b *Barnard) OnConnect(e *gumble.ConnectEvent) {
39 b.Ui.SetActive(uiViewInput)
43 b.UpdateInputStatus(fmt.Sprintf("To: %s", e.Client.Self.Channel.Name))
44 b.AddOutputLine(fmt.Sprintf("Connected to %s", b.Client.Conn.RemoteAddr()))
45 if e.WelcomeMessage != nil {
46 b.AddOutputLine(fmt.Sprintf("Welcome message: %s", esc(*e.WelcomeMessage)))
50 func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) {
53 case gumble.DisconnectError:
54 reason = "connection error"
57 b.AddOutputLine("Disconnected")
59 b.AddOutputLine("Disconnected: " + reason)
65 func (b *Barnard) OnTextMessage(e *gumble.TextMessageEvent) {
66 b.AddOutputMessage(e.Sender, e.Message)
69 func (b *Barnard) OnUserChange(e *gumble.UserChangeEvent) {
70 if e.Type.Has(gumble.UserChangeChannel) && e.User == b.Client.Self {
71 b.UpdateInputStatus(fmt.Sprintf("To: %s", e.User.Channel.Name))
77 func (b *Barnard) OnChannelChange(e *gumble.ChannelChangeEvent) {
82 func (b *Barnard) OnPermissionDenied(e *gumble.PermissionDeniedEvent) {
85 case gumble.PermissionDeniedOther:
87 case gumble.PermissionDeniedPermission:
88 info = "insufficient permissions"
89 case gumble.PermissionDeniedSuperUser:
90 info = "cannot modify SuperUser"
91 case gumble.PermissionDeniedInvalidChannelName:
92 info = "invalid channel name"
93 case gumble.PermissionDeniedTextTooLong:
94 info = "text too long"
95 case gumble.PermissionDeniedTemporaryChannel:
96 info = "temporary channel"
97 case gumble.PermissionDeniedMissingCertificate:
98 info = "missing certificate"
99 case gumble.PermissionDeniedInvalidUserName:
100 info = "invalid user name"
101 case gumble.PermissionDeniedChannelFull:
102 info = "channel full"
103 case gumble.PermissionDeniedNestingLimit:
104 info = "nesting limit"
106 b.AddOutputLine(fmt.Sprintf("Permission denied: %s", info))
109 func (b *Barnard) OnUserList(e *gumble.UserListEvent) {
112 func (b *Barnard) OnACL(e *gumble.ACLEvent) {
115 func (b *Barnard) OnBanList(e *gumble.BanListEvent) {
118 func (b *Barnard) OnContextActionChange(e *gumble.ContextActionChangeEvent) {
121 func (b *Barnard) OnServerConfig(e *gumble.ServerConfigEvent) {