feat: add DM channels functionality (#58)
* feat: add DM channels functionality * fix: remove main TreeView title
This commit is contained in:
parent
7ea5aab4f5
commit
cbfd15ade8
4 changed files with 67 additions and 17 deletions
19
discord.go
19
discord.go
|
|
@ -37,6 +37,22 @@ func newSession() *discordgo.Session {
|
|||
}
|
||||
|
||||
func onSessionReady(_ *discordgo.Session, r *discordgo.Ready) {
|
||||
dmNode := tview.NewTreeNode("Direct Messages").
|
||||
Collapse()
|
||||
|
||||
n := mainTreeView.GetRoot()
|
||||
n.AddChild(dmNode)
|
||||
|
||||
sort.Slice(r.PrivateChannels, func(i, j int) bool {
|
||||
return r.PrivateChannels[i].LastMessageID > r.PrivateChannels[j].LastMessageID
|
||||
})
|
||||
|
||||
for _, c := range r.PrivateChannels {
|
||||
cn := tview.NewTreeNode(genChannelRepr(c)).
|
||||
SetReference(c.ID)
|
||||
dmNode.AddChild(cn)
|
||||
}
|
||||
|
||||
sort.Slice(r.Guilds, func(a, b int) bool {
|
||||
found := false
|
||||
for _, gID := range r.Settings.GuildPositions {
|
||||
|
|
@ -54,14 +70,13 @@ func onSessionReady(_ *discordgo.Session, r *discordgo.Ready) {
|
|||
return false
|
||||
})
|
||||
|
||||
n := guildsTreeView.GetRoot()
|
||||
for _, g := range r.Guilds {
|
||||
gn := tview.NewTreeNode(g.Name).
|
||||
SetReference(g.ID)
|
||||
n.AddChild(gn)
|
||||
}
|
||||
|
||||
guildsTreeView.SetCurrentNode(n)
|
||||
mainTreeView.SetCurrentNode(n)
|
||||
}
|
||||
|
||||
func onSessionMessageCreate(_ *discordgo.Session, m *discordgo.MessageCreate) {
|
||||
|
|
|
|||
10
main.go
10
main.go
|
|
@ -12,7 +12,7 @@ func main() {
|
|||
tview.Styles = conf.Theme
|
||||
|
||||
app = newApplication()
|
||||
guildsTreeView = newGuildsTreeView()
|
||||
mainTreeView = newMainTreeView()
|
||||
messagesTextView = newMessagesTextView()
|
||||
messageInputField = newMessageInputField()
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ func main() {
|
|||
AddItem(messagesTextView, 0, 1, false).
|
||||
AddItem(messageInputField, 3, 1, false)
|
||||
mainFlex = tview.NewFlex().
|
||||
AddItem(guildsTreeView, 0, 1, false).
|
||||
AddItem(mainTreeView, 0, 1, false).
|
||||
AddItem(rightFlex, 0, 4, false)
|
||||
|
||||
token := conf.Token
|
||||
|
|
@ -32,7 +32,7 @@ func main() {
|
|||
if token != "" {
|
||||
app.
|
||||
SetRoot(mainFlex, true).
|
||||
SetFocus(guildsTreeView)
|
||||
SetFocus(mainTreeView)
|
||||
|
||||
session = newSession()
|
||||
session.Token = token
|
||||
|
|
@ -67,7 +67,7 @@ func onLoginFormLoginButtonSelected() {
|
|||
if lr.Token != "" && !lr.MFA {
|
||||
app.
|
||||
SetRoot(mainFlex, true).
|
||||
SetFocus(guildsTreeView)
|
||||
SetFocus(mainTreeView)
|
||||
|
||||
session.Token = lr.Token
|
||||
session.Identify.Token = lr.Token
|
||||
|
|
@ -91,7 +91,7 @@ func onLoginFormLoginButtonSelected() {
|
|||
|
||||
app.
|
||||
SetRoot(mainFlex, true).
|
||||
SetFocus(guildsTreeView)
|
||||
SetFocus(mainTreeView)
|
||||
|
||||
session.Token = lr.Token
|
||||
session.Identify.Token = lr.Token
|
||||
|
|
|
|||
29
ui.go
29
ui.go
|
|
@ -13,7 +13,7 @@ import (
|
|||
var (
|
||||
app *tview.Application
|
||||
loginForm *tview.Form
|
||||
guildsTreeView *tview.TreeView
|
||||
mainTreeView *tview.TreeView
|
||||
messagesTextView *tview.TextView
|
||||
messageInputField *tview.InputField
|
||||
mainFlex *tview.Flex
|
||||
|
|
@ -31,7 +31,7 @@ func newApplication() *tview.Application {
|
|||
func onAppInputCapture(e *tcell.EventKey) *tcell.EventKey {
|
||||
switch e.Name() {
|
||||
case conf.Keybindings.GuildsTreeViewFocus:
|
||||
app.SetFocus(guildsTreeView)
|
||||
app.SetFocus(mainTreeView)
|
||||
case conf.Keybindings.MessagesTextViewFocus:
|
||||
app.SetFocus(messagesTextView)
|
||||
case conf.Keybindings.MessageInputFieldFocus:
|
||||
|
|
@ -41,21 +41,19 @@ func onAppInputCapture(e *tcell.EventKey) *tcell.EventKey {
|
|||
return e
|
||||
}
|
||||
|
||||
func newGuildsTreeView() *tview.TreeView {
|
||||
func newMainTreeView() *tview.TreeView {
|
||||
w := tview.NewTreeView()
|
||||
w.
|
||||
SetSelectedFunc(onGuildsTreeViewSelected).
|
||||
SetSelectedFunc(onMainTreeViewSelected).
|
||||
SetTopLevel(1).
|
||||
SetRoot(tview.NewTreeNode("")).
|
||||
SetBorder(true).
|
||||
SetBorderPadding(0, 0, 1, 0).
|
||||
SetTitle("Guilds").
|
||||
SetTitleAlign(tview.AlignLeft)
|
||||
SetBorderPadding(0, 0, 1, 0)
|
||||
|
||||
return w
|
||||
}
|
||||
|
||||
func onGuildsTreeViewSelected(n *tview.TreeNode) {
|
||||
func onMainTreeViewSelected(n *tview.TreeNode) {
|
||||
selectedChannel = nil
|
||||
selectedMessage = nil
|
||||
messagesTextView.
|
||||
|
|
@ -72,7 +70,9 @@ func onGuildsTreeViewSelected(n *tview.TreeNode) {
|
|||
return
|
||||
}
|
||||
|
||||
n.ClearChildren()
|
||||
if n.GetText() == "Direct Messages" {
|
||||
return
|
||||
}
|
||||
|
||||
gID := n.GetReference().(string)
|
||||
g, err := session.State.Guild(gID)
|
||||
|
|
@ -112,6 +112,15 @@ func onGuildsTreeViewSelected(n *tview.TreeNode) {
|
|||
Clear().
|
||||
SetTitle(title)
|
||||
|
||||
go renderMessages(c.ID)
|
||||
} else if c.Type == discordgo.ChannelTypeDM || c.Type == discordgo.ChannelTypeGroupDM {
|
||||
selectedChannel = c
|
||||
app.SetFocus(messageInputField)
|
||||
|
||||
messagesTextView.
|
||||
Clear().
|
||||
SetTitle(genChannelRepr(c))
|
||||
|
||||
go renderMessages(c.ID)
|
||||
}
|
||||
}
|
||||
|
|
@ -186,7 +195,7 @@ func createSecondLevelChannelsTreeNodes(cs []*discordgo.Channel) {
|
|||
}
|
||||
|
||||
func getTreeNodeByReference(r interface{}) (mn *tview.TreeNode) {
|
||||
guildsTreeView.GetRoot().Walk(func(n, _ *tview.TreeNode) bool {
|
||||
mainTreeView.GetRoot().Walk(func(n, _ *tview.TreeNode) bool {
|
||||
if n.GetReference() == r {
|
||||
mn = n
|
||||
return false
|
||||
|
|
|
|||
26
util.go
Normal file
26
util.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/ayntgl/discordgo"
|
||||
)
|
||||
|
||||
func genChannelRepr(c *discordgo.Channel) string {
|
||||
var repr string
|
||||
if c.Name != "" {
|
||||
repr = c.Name
|
||||
} else if len(c.Recipients) == 1 {
|
||||
rp := c.Recipients[0]
|
||||
repr = rp.Username + "#" + rp.Discriminator
|
||||
} else {
|
||||
rps := make([]string, len(c.Recipients))
|
||||
for i, r := range c.Recipients {
|
||||
rps[i] = r.Username + "#" + r.Discriminator
|
||||
}
|
||||
|
||||
repr = strings.Join(rps, ", ")
|
||||
}
|
||||
|
||||
return repr
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue