From d8ed1c95600c41973b70b4163143b45503c00b02 Mon Sep 17 00:00:00 2001 From: Kristian _server Date: Mon, 27 Nov 2023 20:09:46 +0100 Subject: [PATCH] added roll command, still trying to fix context --- bot/bot.go | 30 ++++++++++++++++++++------ bot/chat.go | 55 ++++++++++++++++-------------------------------- pb_data/logs.db | Bin 53248 -> 53248 bytes 3 files changed, 42 insertions(+), 43 deletions(-) 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 38440e0b6806db499e1b65c5c21359066daee261..b1ae685b5b1fc43a628fdb1418b4f4cf89d7da7e 100644 GIT binary patch delta 2468 zcmdUxU1%It6vt<>w$-|s6Ri?_u-O)?mC$AG%zn%SB8?A%pi)1;pkTY%olVTn&fJ~P z-Fw)1)Wn0IYnNOl?7DJE3)z$ z`Kjm7C`U>;FOv)PmjX_>(RQjnUUdyw_9}jTaI?Js(p}k7UP0OzS;`Z#J|}CetD#}F zai>ykIGx78UP#Io^GF+)E#(PWkCR=)VZpD~a7$?_-SyEjsQE&rD&V)C8Q<{Gw(KiKkLhP(m^t#rRSA)UHr#>qlmKQA` zH7}P`UX^jCDhT4^(Rbz3;;H@_ha`R^u|QeF{(8IJ^^LWn?CAsa`A;K>PpF7eN+#Y) zCvF68(=dWktdo{VlQ%Es zb$ujV#uLIeC+x}eYI>Yg7QqV+R8f&V-K(f{=w70X(<_Td)V$L4(Wi z5j+Qv!3)#e+_o5-QInfS+P=UzG;Qb3z+9K&tsm+JePS6^IFWq z%(IziG4C+n^z&3mgeKKNoSdMb|VM%-=D!p}D>`iCpL^g_HDhg7O zpNhOxWTqlF6*;M>m5T86v&rS{)J-cD(btl02yh;5!H@7249RA}uncEmM*2g#5#=_% z&x*^@-aB{1-fTt{x$h|X#LD3W9!%i=1ny1X<{|GTKj87g?t}-N3A{Cd;|bhO^QRB~ ZQN#;d=^KpyJ0<^%A$jsY56LG(`5(n`SaARV delta 2222 zcmdUwO=ufO6vt;Jr;$}lLmGm~p|vn+N-(l#wJXVMVj5Ejty;NCW2kWs^;)a_w4~Li z*E+md|(11z^?j?s(L=TA%A>@!!C^;A!N*aoBFQqdpXT6eT=(Q|p z-uo^3&;Px7($pK?dc%90L2vXe0H0?Mc=m$3fqw=bz51Ddy5E2NC(j;z7(9foU~|il zZ}6uX4d46WyCj<6*$Gw{Wyj-l5ftIVEDEDoDB|X9BtDAB!>;+KgCog7&*0GH>c=N0 zCx_C}bWu!;HQkC{S2ioV8aAcJ`c_6-&tyw}z zuCN8Urt?K2J_R-DtgJ1TGsVfX8Os!#d$)9^4*;*!l)t(_BmZ1;_49c9o87*( zDFZftjt?{V;rOX@2ir~QWV=cCc9yWLps2zYq6M{#QyYKIuwgb5LfiyPDnX+>$M2VM zn7eefE?tAKrup1L)iPvNGB{i~|KcM@mLr`PxWlsh+$F1a$%@NTUaJ(uxSp*@u`K?T zb;(A!QI3lqmfhzEvTrIx_L!>+DiSK?>~g-4m(Ar|3A5`DFT2Vm0&G0iQIn+vRbY*CRWO7cu6B4rdTR1<%?44!^<43-MYnsUhvjPBk-t{AyChSSqY$pk8 z@un4xvwWmbQ*}OXeL&dv3+bvZ6;V;hk4w4u`1^!4DhqPflyf?puL_8ZB~E%rm`GJw zX7d>fRnoaQ#~YL_S;C5IqAi`mu4&XL>l!7MvaUH$DC;^ynX;}E$oS!D;DfIL_&0n3 zfA_(s@E7<9KER<=7>}j=&1C99khz0j|K!FZsfC;eZATKcXa_EW7A^X1(4uvYgI3}d zuZICGqrK?uMQbl=dr{hp++H&N;2q!#ZUS;5zmc=KPflkmxCwW0XrAmp?`tOKji86= z!&|xg^l&VDTBwJd9Z?&S9Z@H9c0|pj>?qOi9c1jta3bA_G$&G>NO2;WM)vR#lM!O_ z%n1-YLz?uI^rr>4;3m9@Lnd))5|`#qfLUzDt`6HHwC+qFb^5uJQMcEfj5@yRWYo3k zWQl-xh;cHbBhx!Fts_$dQ|>P+9WUjMEaM;80ltB4Ft81G;5NJq8}J%5;Vcf-NmX@H zRsH4wV>X{%|BF_|kW0pW-yk%B5UG#x_29J9=RG*B`Ed_UtH0NSCkDM7L--20=wAM< s*&7@CFS@yY1lNw>>JeP&9G-V!Z