|
@@ -5,7 +5,6 @@ import (
|
|
|
"errors"
|
|
"errors"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"io"
|
|
"io"
|
|
|
- "log/slog"
|
|
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"os"
|
|
"os"
|
|
|
"path/filepath"
|
|
"path/filepath"
|
|
@@ -145,7 +144,7 @@ func (ml *messagesList) drawAuthor(message discord.Message) {
|
|
|
if message.GuildID.IsValid() {
|
|
if message.GuildID.IsValid() {
|
|
|
member, err := discordState.Cabinet.Member(message.GuildID, message.Author.ID)
|
|
member, err := discordState.Cabinet.Member(message.GuildID, message.Author.ID)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get member from state", "guild_id", message.GuildID, "member_id", message.Author.ID, "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get member from state", err, "guild_id", message.GuildID, "user", message.Author)
|
|
|
} else {
|
|
} else {
|
|
|
if member.Nick != "" {
|
|
if member.Nick != "" {
|
|
|
name = member.Nick
|
|
name = member.Nick
|
|
@@ -294,13 +293,13 @@ func (ml *messagesList) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
|
|
func (ml *messagesList) _select(name string) {
|
|
func (ml *messagesList) _select(name string) {
|
|
|
ms, err := discordState.Cabinet.Messages(app.guildsTree.selectedChannelID)
|
|
ms, err := discordState.Cabinet.Messages(app.guildsTree.selectedChannelID)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get messages", "err", err, "channel_id", app.guildsTree.selectedChannelID)
|
|
|
|
|
|
|
+ app.onError("Failed to get messages", err, "channel_id", app.guildsTree.selectedChannelID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
msgIdx, err := ml.selectedMessageIndex()
|
|
msgIdx, err := ml.selectedMessageIndex()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -349,7 +348,7 @@ func (ml *messagesList) onHighlighted(added, removed, remaining []string) {
|
|
|
if len(added) > 0 {
|
|
if len(added) > 0 {
|
|
|
id, err := discord.ParseSnowflake(added[0])
|
|
id, err := discord.ParseSnowflake(added[0])
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("Failed to parse region id as int to use as message id.", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to parse region id as int to use as message id", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -360,7 +359,7 @@ func (ml *messagesList) onHighlighted(added, removed, remaining []string) {
|
|
|
func (ml *messagesList) yankID() {
|
|
func (ml *messagesList) yankID() {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -370,7 +369,7 @@ func (ml *messagesList) yankID() {
|
|
|
func (ml *messagesList) yankContent() {
|
|
func (ml *messagesList) yankContent() {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -380,7 +379,7 @@ func (ml *messagesList) yankContent() {
|
|
|
func (ml *messagesList) yankURL() {
|
|
func (ml *messagesList) yankURL() {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -390,7 +389,7 @@ func (ml *messagesList) yankURL() {
|
|
|
func (ml *messagesList) open() {
|
|
func (ml *messagesList) open() {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -492,45 +491,45 @@ func (ml *messagesList) showAttachmentsList(urls []string, attachments []discord
|
|
|
func (ml *messagesList) openAttachment(attachment discord.Attachment) {
|
|
func (ml *messagesList) openAttachment(attachment discord.Attachment) {
|
|
|
resp, err := http.Get(attachment.URL)
|
|
resp, err := http.Get(attachment.URL)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to fetch the attachment", "err", err, "url", attachment.URL)
|
|
|
|
|
|
|
+ app.onError("Failed to fetch the attachment", err, "url", attachment.URL)
|
|
|
}
|
|
}
|
|
|
defer resp.Body.Close()
|
|
defer resp.Body.Close()
|
|
|
|
|
|
|
|
path := filepath.Join(consts.CacheDir(), "attachments")
|
|
path := filepath.Join(consts.CacheDir(), "attachments")
|
|
|
if err := os.MkdirAll(path, os.ModePerm); err != nil {
|
|
if err := os.MkdirAll(path, os.ModePerm); err != nil {
|
|
|
- slog.Error("failed to create attachments dir", "err", err, "path", path)
|
|
|
|
|
|
|
+ app.onError("Failed to create attachments dir", err, "path", path)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
path = filepath.Join(path, attachment.Filename)
|
|
path = filepath.Join(path, attachment.Filename)
|
|
|
file, err := os.Create(path)
|
|
file, err := os.Create(path)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to create attachment file", "err", err, "path", path)
|
|
|
|
|
|
|
+ app.onError("Failed to create attachment file", err, "path", path)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
defer file.Close()
|
|
defer file.Close()
|
|
|
|
|
|
|
|
if _, err := io.Copy(file, resp.Body); err != nil {
|
|
if _, err := io.Copy(file, resp.Body); err != nil {
|
|
|
- slog.Error("failed to copy attachment to file", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to copy attachment to file", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if err := open.Start(path); err != nil {
|
|
if err := open.Start(path); err != nil {
|
|
|
- slog.Error("failed to open attachment file", "err", err, "path", path)
|
|
|
|
|
|
|
+ app.onError("Failed to open attachment file", err, "path", path)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (ml *messagesList) openURL(url string) {
|
|
func (ml *messagesList) openURL(url string) {
|
|
|
if err := open.Start(url); err != nil {
|
|
if err := open.Start(url); err != nil {
|
|
|
- slog.Error("failed to open URL", "err", err, "url", url)
|
|
|
|
|
|
|
+ app.onError("Failed to open URL", err, "url", url)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (ml *messagesList) reply(mention bool) {
|
|
func (ml *messagesList) reply(mention bool) {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -538,7 +537,7 @@ func (ml *messagesList) reply(mention bool) {
|
|
|
if msg.GuildID.IsValid() {
|
|
if msg.GuildID.IsValid() {
|
|
|
member, err := discordState.Cabinet.Member(msg.GuildID, msg.Author.ID)
|
|
member, err := discordState.Cabinet.Member(msg.GuildID, msg.Author.ID)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get member from state", "guild_id", msg.GuildID, "member_id", msg.Author.ID, "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get member from state", err, "guild_id", msg.GuildID, "member_id", msg.Author.ID)
|
|
|
} else {
|
|
} else {
|
|
|
if member.Nick != "" {
|
|
if member.Nick != "" {
|
|
|
name = member.Nick
|
|
name = member.Nick
|
|
@@ -564,18 +563,18 @@ func (ml *messagesList) reply(mention bool) {
|
|
|
func (ml *messagesList) edit() {
|
|
func (ml *messagesList) edit() {
|
|
|
message, err := ml.selectedMessage()
|
|
message, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
me, err := discordState.Cabinet.Me()
|
|
me, err := discordState.Cabinet.Me()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get client user (me)", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get client user (me)", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if message.Author.ID != me.ID {
|
|
if message.Author.ID != me.ID {
|
|
|
- slog.Error("failed to edit message; not the author", "channel_id", message.ChannelID, "message_id", message.ID)
|
|
|
|
|
|
|
+ app.onError("Failed to edit message", errors.New("You are not the author"), "channel_id", message.ChannelID, "message_id", message.ID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -602,25 +601,25 @@ func (ml *messagesList) confirmDelete() {
|
|
|
func (ml *messagesList) delete() {
|
|
func (ml *messagesList) delete() {
|
|
|
msg, err := ml.selectedMessage()
|
|
msg, err := ml.selectedMessage()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get selected message", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get selected message", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if msg.GuildID.IsValid() {
|
|
if msg.GuildID.IsValid() {
|
|
|
me, err := discordState.Cabinet.Me()
|
|
me, err := discordState.Cabinet.Me()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to get client user (me)", "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to get client user (me)", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if msg.Author.ID != me.ID && !discordState.HasPermissions(msg.ChannelID, discord.PermissionManageMessages) {
|
|
if msg.Author.ID != me.ID && !discordState.HasPermissions(msg.ChannelID, discord.PermissionManageMessages) {
|
|
|
- slog.Error("failed to delete message; missing relevant permissions", "channel_id", msg.ChannelID, "message_id", msg.ID)
|
|
|
|
|
|
|
+ app.onError("Failed to delete message", errors.New("Permission denied."), "channel_id", msg.ChannelID, "message_id", msg.ID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if err := discordState.DeleteMessage(app.guildsTree.selectedChannelID, msg.ID, ""); err != nil {
|
|
if err := discordState.DeleteMessage(app.guildsTree.selectedChannelID, msg.ID, ""); err != nil {
|
|
|
- slog.Error("failed to delete message", "channel_id", app.guildsTree.selectedChannelID, "message_id", msg.ID, "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to delete message", err, "channel_id", app.guildsTree.selectedChannelID, "message_id", msg.ID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -628,7 +627,7 @@ func (ml *messagesList) delete() {
|
|
|
ml.Highlight()
|
|
ml.Highlight()
|
|
|
|
|
|
|
|
if err := discordState.MessageRemove(app.guildsTree.selectedChannelID, msg.ID); err != nil {
|
|
if err := discordState.MessageRemove(app.guildsTree.selectedChannelID, msg.ID); err != nil {
|
|
|
- slog.Error("failed to delete message", "channel_id", app.guildsTree.selectedChannelID, "message_id", msg.ID, "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to delete message", err, "channel_id", app.guildsTree.selectedChannelID, "message_id", msg.ID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -650,7 +649,7 @@ func (ml *messagesList) requestGuildMembers(gID discord.GuildID, ms []discord.Me
|
|
|
UserIDs: slices.Compact(usersToFetch),
|
|
UserIDs: slices.Compact(usersToFetch),
|
|
|
})
|
|
})
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- slog.Error("failed to request guild members", "guild_id", gID, "err", err)
|
|
|
|
|
|
|
+ app.onError("Failed to request guild members", err, "guild_id", gID)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|