Skip to content

Commit

Permalink
add msg editing, many refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
samarets committed Mar 22, 2023
1 parent ee4f3be commit 169786b
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 10 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Fast and simple **Telegram Support Bot** 🤖. It will help to connect the user
## Features:
- All message types are forwarded
- Message replies work
- Editing text/caption work
- Full message editing in queue work
- Adding/Removing support agents by a special command
- List of all support agents
- Post a support request in a separate chat
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:
dockerfile: cmd/bot/Dockerfile
container_name: bot
volumes:
- bot-data:/bot
- ./.db:/app/.db
restart: always

volumes:
Expand Down
89 changes: 80 additions & 9 deletions internal/bot/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,24 +148,54 @@ func (b *bot) InitUpdates() {
}

}

if update.EditedMessage != nil {
userState, err := b.db.getUserState(update.SentFrom().ID)
if err != nil {
log.Error().Err(err).Send()
continue
}

if userState != queueState && userState != roomState {
continue
}

if userState == queueState {
err = b.queueStateFunc(update)
if err != nil {
log.Error().Err(err).Send()
}

continue
}
if userState == roomState {
err = b.updateMsgFunc(update)
if err != nil {
log.Error().Err(err).Send()
}

continue
}

}
}
}

func (b *bot) defaultStateFunc(update tgbotapi.Update) error {
err := b.db.queueDB().set(update.Message.From.ID, update.Message.From)
err := b.db.queueDB().set(update.SentFrom().ID, update.Message.From)
if err != nil {
return err
}

var bufferMessages []tgbotapi.Message
bufferMessages = append(bufferMessages, *update.Message)
err = b.db.bufferDB().set(update.Message.From.ID, bufferMessages)
err = b.db.bufferDB().set(update.SentFrom().ID, bufferMessages)
if err != nil {
return err
}

msg := tgbotapi.NewMessage(
update.Message.From.ID,
update.SentFrom().ID,
b.tl.GetMessage(b.db.languageDB().get(update.SentFrom().ID), "got_message"),
)
_, err = b.bot.Send(msg)
Expand All @@ -179,14 +209,23 @@ func (b *bot) defaultStateFunc(update tgbotapi.Update) error {
}

func (b *bot) queueStateFunc(update tgbotapi.Update) error {
bufferMessages, err := b.db.bufferDB().get(update.Message.From.ID)
bufferMessages, err := b.db.bufferDB().get(update.SentFrom().ID)
if err != nil {
return err
}

bufferMessages = append(bufferMessages, *update.Message)
if update.EditedMessage != nil {
for i, msg := range bufferMessages {
if msg.MessageID != update.EditedMessage.MessageID {
continue
}
bufferMessages[i] = *update.EditedMessage
}
} else {
bufferMessages = append(bufferMessages, *update.Message)
}

err = b.db.bufferDB().set(update.Message.From.ID, bufferMessages)
err = b.db.bufferDB().set(update.SentFrom().ID, bufferMessages)
if err != nil {
return err
}
Expand All @@ -195,15 +234,15 @@ func (b *bot) queueStateFunc(update tgbotapi.Update) error {
}

func (b *bot) roomStateFunc(update tgbotapi.Update) error {
whoomSend, err := b.db.roomsDB().get(update.Message.From.ID)
whomSend, err := b.db.roomsDB().get(update.SentFrom().ID)
if err != nil {
return err
}
if whoomSend == nil {
if whomSend == nil {
return fmt.Errorf("whoomSend is empty")
}

msg := tgbotapi.NewCopyMessage(*whoomSend, update.Message.From.ID, update.Message.MessageID)
msg := tgbotapi.NewCopyMessage(*whomSend, update.SentFrom().ID, update.Message.MessageID)
if update.Message.ReplyToMessage != nil {
replyToID, err := b.db.messagesIDsDB().get(update.Message.ReplyToMessage.MessageID)
if err != nil && err != badger.ErrKeyNotFound {
Expand Down Expand Up @@ -235,6 +274,38 @@ func (b *bot) roomStateFunc(update tgbotapi.Update) error {
return nil
}

func (b *bot) updateMsgFunc(update tgbotapi.Update) error {
whomSend, err := b.db.roomsDB().get(update.SentFrom().ID)
if err != nil {
return err
}
if whomSend == nil {
return fmt.Errorf("whomSend is empty")
}

msgID, err := b.db.messagesIDsDB().get(update.EditedMessage.MessageID)
if err != nil {
return err
}
if msgID == nil {
return fmt.Errorf("msgID is empty")
}

var updMsg tgbotapi.Chattable
if update.EditedMessage.Caption != "" {
updMsg = tgbotapi.NewEditMessageCaption(*whomSend, *msgID, update.EditedMessage.Caption)
} else {
updMsg = tgbotapi.NewEditMessageText(*whomSend, *msgID, update.EditedMessage.Text)
}

_, err = b.bot.Send(updMsg)
if err != nil {
return err
}

return nil
}

func (b *bot) sendSupportRequest(update tgbotapi.Update) {
groupID := b.db.groupDB().get()
if groupID == 0 {
Expand Down

0 comments on commit 169786b

Please sign in to comment.