added roll command, still trying to fix context
This commit is contained in:
parent
ed5351f790
commit
d8ed1c9560
30
bot/bot.go
30
bot/bot.go
@ -3,8 +3,10 @@ package bot
|
||||
import (
|
||||
"bitbot/pb"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
@ -67,12 +69,7 @@ func newMessage(discord *discordgo.Session, message *discordgo.MessageCreate) {
|
||||
channelID := message.ChannelID
|
||||
conversationHistory = populateConversationHistory(discord, channelID, conversationHistory)
|
||||
|
||||
userMessage := openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: message.Content,
|
||||
}
|
||||
|
||||
conversationHistory = append(conversationHistory, userMessage)
|
||||
log.Info("Conversation history from bot.go:", conversationHistory)
|
||||
|
||||
if strings.HasPrefix(message.Content, "!cry") {
|
||||
currentCryptoPrice := getCurrentCryptoPrice(message.Content)
|
||||
@ -234,12 +231,33 @@ func newMessage(discord *discordgo.Session, message *discordgo.MessageCreate) {
|
||||
generalHelpMessage := "Available commands:\n" +
|
||||
"!cry - Get information about cryptocurrency prices.\n" +
|
||||
"!bit - Interact with the BitBot chatbot.\n" +
|
||||
"!roll - Random number from 1-100 or specify a number (!roll 9001).\n" +
|
||||
"!help - Show available commands.\n" +
|
||||
"!help admin - Show admin commands.\n"
|
||||
|
||||
discord.ChannelMessageSend(message.ChannelID, generalHelpMessage)
|
||||
}
|
||||
} else if strings.HasPrefix(message.Content, "!roll") {
|
||||
handleRollCommand(discord, message)
|
||||
}
|
||||
|
||||
conversationHistoryMap[userID] = conversationHistory
|
||||
}
|
||||
func handleRollCommand(session *discordgo.Session, message *discordgo.MessageCreate) {
|
||||
// Extract the argument from the message
|
||||
args := strings.Fields(message.Content[len("!roll"):])
|
||||
if len(args) == 0 {
|
||||
// No argument provided, generate random number between 1 and 100
|
||||
randomNumber := rand.Intn(100) + 1
|
||||
session.ChannelMessageSend(message.ChannelID, fmt.Sprintf("You rolled a %d!", randomNumber))
|
||||
} else {
|
||||
// Argument provided, try to parse it as a number
|
||||
if num, err := strconv.Atoi(args[0]); err == nil {
|
||||
// Generate random number between 1 and the provided number
|
||||
randomNumber := rand.Intn(num) + 1
|
||||
session.ChannelMessageSend(message.ChannelID, fmt.Sprintf("%d", randomNumber))
|
||||
} else {
|
||||
session.ChannelMessageSend(message.ChannelID, "Invalid argument. Please provide a valid number.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
55
bot/chat.go
55
bot/chat.go
@ -49,10 +49,6 @@ func populateConversationHistory(session *discordgo.Session, channelID string, c
|
||||
// Add new messages from the channel
|
||||
addedTokens := 0
|
||||
for _, message := range messages {
|
||||
if message.Author.ID == session.State.User.ID || message.Author.Bot {
|
||||
continue // Skip the bot's own messages
|
||||
}
|
||||
|
||||
if len(message.Content) > 0 {
|
||||
tokens := len(message.Content) + 2 // Account for role and content tokens
|
||||
if totalTokens+tokens <= maxContextTokens && addedTokens+tokens <= maxContextTokens {
|
||||
@ -79,46 +75,31 @@ func populateConversationHistory(session *discordgo.Session, channelID string, c
|
||||
func chatGPT(session *discordgo.Session, channelID string, message string, conversationHistory []openai.ChatCompletionMessage) {
|
||||
client := openai.NewClient(OpenAIToken)
|
||||
|
||||
// Retrieve recent messages from the channel
|
||||
channelMessages, err := session.ChannelMessages(channelID, 50, "", "", "")
|
||||
if err != nil {
|
||||
log.Error("Error retrieving channel messages:", err)
|
||||
}
|
||||
|
||||
// Convert channel messages to chat completion messages
|
||||
for _, msg := range channelMessages {
|
||||
if msg.Author.ID != session.State.User.ID && len(msg.Content) > 0 {
|
||||
conversationHistory = append(conversationHistory, openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: msg.Content,
|
||||
})
|
||||
}
|
||||
}
|
||||
// Trim conversation history if it exceeds maxContextTokens
|
||||
totalTokens := 0
|
||||
trimmedMessages := []openai.ChatCompletionMessage{}
|
||||
// totalTokens := 0
|
||||
// trimmedMessages := []openai.ChatCompletionMessage{}
|
||||
|
||||
for i := len(conversationHistory) - 1; i >= 0; i-- {
|
||||
msg := conversationHistory[i]
|
||||
tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens
|
||||
// for i := len(conversationHistory) - 1; i >= 0; i-- {
|
||||
// msg := conversationHistory[i]
|
||||
// tokens := len(msg.Content) + len(msg.Role) + 2 // Account for role and content tokens
|
||||
|
||||
if totalTokens+tokens <= maxContextTokens {
|
||||
trimmedMessages = append([]openai.ChatCompletionMessage{msg}, trimmedMessages...)
|
||||
totalTokens += tokens
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
// if totalTokens+tokens <= maxContextTokens {
|
||||
// trimmedMessages = append([]openai.ChatCompletionMessage{msg}, trimmedMessages...)
|
||||
// totalTokens += tokens
|
||||
// } else {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
|
||||
// Update conversationHistory with trimmed conversation history
|
||||
conversationHistory = trimmedMessages
|
||||
//conversationHistory = trimmedMessages
|
||||
|
||||
// Add user message to conversation history
|
||||
userMessage := openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: message,
|
||||
}
|
||||
conversationHistory = append(conversationHistory, userMessage)
|
||||
//userMessage := openai.ChatCompletionMessage{
|
||||
// Role: openai.ChatMessageRoleUser,
|
||||
// Content: message,
|
||||
//}
|
||||
//conversationHistory = append(conversationHistory, userMessage)
|
||||
|
||||
// Perform GPT-4 completion
|
||||
log.Info("Starting completion...", conversationHistory)
|
||||
|
||||
BIN
pb_data/logs.db
BIN
pb_data/logs.db
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user