diff --git a/bot/bot.go b/bot/bot.go index d35c1ad..1dbc86d 100644 --- a/bot/bot.go +++ b/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.") + } + } +} diff --git a/bot/chat.go b/bot/chat.go index e1c1002..cadcf82 100644 --- a/bot/chat.go +++ b/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) diff --git a/pb_data/logs.db b/pb_data/logs.db index 38440e0..b1ae685 100644 Binary files a/pb_data/logs.db and b/pb_data/logs.db differ