Channel/Thread Chat Toggle (#75)

* Add: Some Commands work in GuildText

* Add: Channel Toggle Command

* Add: Channel History handler by user

* Update: version increment

* Update: Testing scope

* Update: env sample

* Update: Readme goal checks

* Update: builds run on PR to validate them
This commit is contained in:
Kevin Dang
2024-06-22 20:57:38 -07:00
committed by GitHub
parent 1041f4ca0b
commit de15185cff
15 changed files with 184 additions and 35 deletions

View File

@@ -1,7 +1,7 @@
import { embedMessage, event, Events, normalMessage, UserMessage } from '../utils/index.js'
import { Configuration, getConfig, getThread, openConfig, openThreadInfo } from '../utils/jsonHandler.js'
import { Configuration, getChannelInfo, getConfig, getThread, openChannelInfo, openConfig, openThreadInfo } from '../utils/jsonHandler.js'
import { clean } from '../utils/mentionClean.js'
import { ThreadChannel } from 'discord.js'
import { TextChannel, ThreadChannel } from 'discord.js'
/**
* Max Message length for free users is 2000 characters (bot or not).
@@ -10,17 +10,6 @@ import { ThreadChannel } from 'discord.js'
export default event(Events.MessageCreate, async ({ log, msgHist, tokens, ollama, client }, message) => {
log(`Message \"${clean(message.content)}\" from ${message.author.tag} in channel/thread ${message.channelId}.`)
// need new check for "open/active" threads here!
const threadMessages: UserMessage[] = await new Promise((resolve) => {
// set new queue to modify
getThread(`${message.channelId}.json`, (threadInfo) => {
if (threadInfo?.messages)
resolve(threadInfo.messages)
else
log(`Channel/Thread ${message.channelId} does not exist.`)
})
})
// Do not respond if bot talks in the chat
if (message.author.tag === message.client.user.tag) return
@@ -45,6 +34,14 @@ export default event(Events.MessageCreate, async ({ log, msgHist, tokens, ollama
return
}
// ensure channel json exists, if not create it
if (config.options['channel-toggle']) {
openChannelInfo(message.channelId,
message.channel as TextChannel,
message.author.tag
)
}
// check if there is a set capacity in config
if (typeof config.options['modify-capacity'] !== 'number')
log(`Capacity is undefined, using default capacity of ${msgHist.capacity}.`)
@@ -62,11 +59,31 @@ export default event(Events.MessageCreate, async ({ log, msgHist, tokens, ollama
})
})
// need new check for "open/active" threads/channels here!
const chatMessages: UserMessage[] = await new Promise((resolve) => {
// set new queue to modify
if (config.options['channel-toggle']) {
getChannelInfo(`${message.channelId}-${message.author.tag}.json`, (channelInfo) => {
if (channelInfo?.messages)
resolve(channelInfo.messages)
else
log(`Channel ${message.channel}-${message.author.tag} does not exist.`)
})
} else {
getThread(`${message.channelId}.json`, (threadInfo) => {
if (threadInfo?.messages)
resolve(threadInfo.messages)
else
log(`Thread ${message.channelId} does not exist.`)
})
}
})
// response string for ollama to put its response
let response: string
// set up new queue
msgHist.setQueue(threadMessages)
msgHist.setQueue(chatMessages)
// check if we can push, if not, remove oldest
while (msgHist.size() >= msgHist.capacity) msgHist.dequeue()
@@ -96,10 +113,18 @@ export default event(Events.MessageCreate, async ({ log, msgHist, tokens, ollama
})
// only update the json on success
openThreadInfo(`${message.channelId}.json`,
client.channels.fetch(message.channelId) as unknown as ThreadChannel,
msgHist.getItems()
)
if (config.options['channel-toggle']) {
openChannelInfo(message.channelId,
message.channel as TextChannel,
message.author.tag,
msgHist.getItems()
)
} else {
openThreadInfo(`${message.channelId}.json`,
client.channels.fetch(message.channelId) as unknown as ThreadChannel,
msgHist.getItems()
)
}
} catch (error: any) {
msgHist.pop() // remove message because of failure
openConfig('config.json', 'message-style', false)