diff --git a/discordo.go b/discordo.go index 3add9fb..907a2d1 100644 --- a/discordo.go +++ b/discordo.go @@ -3,9 +3,7 @@ package main import ( "strings" - "github.com/diamondburned/arikawa/v2/discord" - "github.com/diamondburned/arikawa/v2/gateway" - "github.com/diamondburned/arikawa/v2/session" + "github.com/bwmarrin/discordgo" "github.com/gdamore/tcell/v2" "github.com/rigormorrtiss/discordo/ui" "github.com/rigormorrtiss/discordo/util" @@ -20,11 +18,11 @@ var channelsList *tview.List var messagesTextView *tview.TextView var messageInputField *tview.InputField var mainFlex *tview.Flex + var loginVia string -var discordSession *session.Session -var guilds []gateway.GuildCreateEvent -var currentGuild gateway.GuildCreateEvent -var currentChannel discord.Channel +var session *discordgo.Session +var currentGuild *discordgo.Guild +var currentChannel *discordgo.Channel func main() { tview.Styles.PrimitiveBackgroundColor = tcell.GetColor("#1C1E26") @@ -42,7 +40,7 @@ func main() { SetRoot(mainFlex, true). SetFocus(guildsDropDown) - discordSession = newSession("", "", token) + session = newSession("", "", token) } else { app.SetRoot(loginModal, true) } @@ -72,32 +70,31 @@ func onLoginModalDone(buttonIndex int, buttonLabel string) { } } -func newSession(email string, password string, token string) *session.Session { - var sess *session.Session +func newSession(email string, password string, token string) *discordgo.Session { + var sess *discordgo.Session var err error if email != "" && password != "" { - sess, err = session.Login(email, password, "") + sess, err = discordgo.New(email, password) if err != nil { panic(err) } sess.AddHandler(onReady) } else if token != "" { - sess, err = session.New(token) + sess, err = discordgo.New(token) if err != nil { panic(err) } if !strings.HasPrefix(token, "Bot ") { sess.AddHandler(onReady) - } else { - sess.Gateway.AddIntents(gateway.IntentGuilds) - sess.Gateway.AddIntents(gateway.IntentGuildMessages) } } sess.AddHandler(onGuildCreate) sess.AddHandler(onMessageCreate) + + sess.Identify.Intents = discordgo.IntentsAllWithoutPrivileged if err = sess.Open(); err != nil { panic(err) } @@ -105,35 +102,32 @@ func newSession(email string, password string, token string) *session.Session { return sess } -func onGuildCreate(guild *gateway.GuildCreateEvent) { +func onGuildCreate(_ *discordgo.Session, guild *discordgo.GuildCreate) { guildsDropDown.AddOption(guild.Name, nil) - guilds = append(guilds, *guild) } -func onReady(ready *gateway.ReadyEvent) { - guilds = ready.Guilds - for i := range guilds { - guildsDropDown.AddOption(guilds[i].Name, nil) +func onReady(_ *discordgo.Session, ready *discordgo.Ready) { + for i := range ready.Guilds { + guildsDropDown.AddOption(ready.Guilds[i].Name, nil) } } -func onMessageCreate(message *gateway.MessageCreateEvent) { +func onMessageCreate(_ *discordgo.Session, message *discordgo.MessageCreate) { if currentChannel.ID == message.ChannelID { - util.WriteMessage(messagesTextView, message.Message) + util.WriteMessage(messagesTextView, session, message.Message) } } func onGuildsDropDownSelected(text string, _ int) { - // Remove/clear all items from the channels List channelsList.Clear() - // Remove/clear all text from the messages TextView buffer messagesTextView.Clear() - // If the message InputField is not nil, remove the message InputField from the main Flex and set the message InputField to nil + if messageInputField != nil { mainFlex.RemoveItem(messageInputField) messageInputField = nil } + guilds := session.State.Guilds for i := range guilds { guild := guilds[i] if guild.Name == text { @@ -151,24 +145,22 @@ func onGuildsDropDownSelected(text string, _ int) { } func onChannelsListSelected(i int, mainText string, secondaryText string, _ rune) { - // Remove/clear all text from the messages TextView buffer messagesTextView.Clear() - // If the message InputField is nil, add a new message InputField to the main Flex and assign it to message InputField in instance + if messageInputField == nil { messageInputField = ui.NewMessageInputField(onMessageInputFieldDone) - // Add the message InputField as a new item to the main Flex mainFlex.AddItem(messageInputField, 3, 1, false) } app.SetFocus(messageInputField) currentChannel = currentGuild.Channels[i] - // Set the title of the messages TextView Box to the name of the channel + messagesTextView.SetTitle(currentChannel.Name) - messages := util.GetMessages(discordSession, currentChannel.ID, 50) + messages := util.GetMessages(session, currentChannel.ID, 50) for i := len(messages) - 1; i >= 0; i-- { - util.WriteMessage(messagesTextView, messages[i]) + util.WriteMessage(messagesTextView, session, messages[i]) } } @@ -176,13 +168,13 @@ func onMessageInputFieldDone(key tcell.Key) { if key == tcell.KeyEnter { currentText := messageInputField.GetText() currentText = strings.TrimSpace(currentText) - // If the current text of the message InputField is an empty string and the enter key is pressed, do not proceed + if currentText == "" { return } - util.SendMessage(discordSession, currentChannel.ID, currentText) - // Set the current text of the message InputField to an empty string after the message has been sent + util.SendMessage(session, currentChannel.ID, currentText) + messageInputField.SetText("") } } @@ -195,15 +187,15 @@ func onLoginFormLoginButtonSelected() { return } - discordSession = newSession(email, password, "") - util.SetPassword("token", discordSession.Token) + session = newSession(email, password, "") + util.SetPassword("token", session.Token) } else if loginVia == "token" { token := loginForm.GetFormItemByLabel("Token").(*tview.InputField).GetText() if token == "" { return } - discordSession = newSession("", "", token) + session = newSession("", "", token) util.SetPassword("token", token) } diff --git a/go.mod b/go.mod index 2a8ddfc..fcdd642 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/rigormorrtiss/discordo go 1.16 require ( - github.com/diamondburned/arikawa/v2 v2.1.0 + github.com/bwmarrin/discordgo v0.23.2 github.com/gdamore/tcell/v2 v2.3.11 github.com/rivo/tview v0.0.0-20210624165335-29d673af0ce2 github.com/zalando/go-keyring v0.1.1 diff --git a/go.sum b/go.sum index 21409e3..f538d89 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,9 @@ +github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4= +github.com/bwmarrin/discordgo v0.23.2/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M= github.com/danieljoos/wincred v1.1.0 h1:3RNcEpBg4IhIChZdFRSdlQt1QjCp1sMAPIrOnm7Yf8g= github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/diamondburned/arikawa/v2 v2.1.0 h1:nyX5TEf7kuSdCTiZDMlURbabKrLTqPQGDBqnwX+qF9E= -github.com/diamondburned/arikawa/v2 v2.1.0/go.mod h1:e+lhS20ni2luFEU06Pc8paCxgZL99/RZb77dOC82CF0= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.3.3/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= @@ -11,17 +11,13 @@ github.com/gdamore/tcell/v2 v2.3.11 h1:ECO6WqHGbKZ3HrSL7bG/zArMCmLaNr5vcjjMVnLHp github.com/gdamore/tcell/v2 v2.3.11/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc= -github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/tview v0.0.0-20210624165335-29d673af0ce2 h1:I5N0WNMgPSq5NKUFspB4jMJ6n2P0ipz5FlOlB4BXviQ= @@ -35,12 +31,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/zalando/go-keyring v0.1.1 h1:w2V9lcx/Uj4l+dzAf1m9s+DJ1O8ROkEHnynonHjTcYE= github.com/zalando/go-keyring v0.1.1/go.mod h1:OIC+OZ28XbmwFxU/Rp9V7eKzZjamBJwRzC8UFJH9+L8= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -50,8 +42,6 @@ golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/util/discord.go b/util/discord.go index 04718c2..c886c9b 100644 --- a/util/discord.go +++ b/util/discord.go @@ -6,15 +6,23 @@ import ( _ "image/png" "strings" - "github.com/diamondburned/arikawa/v2/discord" - "github.com/diamondburned/arikawa/v2/session" + "github.com/bwmarrin/discordgo" "github.com/rivo/tview" ) -func WriteMessage(messagesTextView *tview.TextView, message discord.Message) { +func WriteMessage(messagesTextView *tview.TextView, session *discordgo.Session, message *discordgo.Message) { var content strings.Builder - content.WriteString("[#E95678::b]" + message.Author.Username + "[-:-:-] ") + if session.State.User.ID == message.Author.ID { + content.WriteString("[#29D398::b]") + content.WriteString(message.Author.Username) + content.WriteString("[-:-:-] ") + } else { + content.WriteString("[#E95678::b]") + content.WriteString(message.Author.Username) + content.WriteString("[-:-:-] ") + } + // If the author of the message is a bot account, add "BOT" beside the username of the author. if message.Author.Bot { content.WriteString("[#26BBD9]BOT[-:-:-] ") @@ -31,21 +39,22 @@ func WriteMessage(messagesTextView *tview.TextView, message discord.Message) { attachments := message.Attachments for i := range attachments { - content.WriteString("\n" + attachments[i].URL) + content.WriteString("\n") + content.WriteString(attachments[i].URL) } fmt.Fprintln(messagesTextView, content.String()) } -func SendMessage(session *session.Session, channelID discord.ChannelID, content string) { - _, err := session.SendText(channelID, content) +func SendMessage(session *discordgo.Session, channelID string, content string) { + _, err := session.ChannelMessageSend(channelID, content) if err != nil { panic(err) } } -func GetMessages(session *session.Session, channelID discord.ChannelID, limit uint) (messages []discord.Message) { - messages, err := session.Messages(channelID, limit) +func GetMessages(session *discordgo.Session, channelID string, limit int) (messages []*discordgo.Message) { + messages, err := session.ChannelMessages(channelID, limit, "", "", "") if err != nil { panic(err) }