Added chat token reset. WIP numbers game.
This commit is contained in:
parent
7321037f4f
commit
74342ab07b
|
@ -76,10 +76,10 @@ module.exports = {
|
|||
userTokenLimit: 20000, // daily, roughly 100+ messages or $0.04 per user
|
||||
userTokenPeriod: 24, // hours
|
||||
replyTokenLimit: 1000,
|
||||
replyWordLimit: 100,
|
||||
replyWordLimit: 70,
|
||||
replyWordLimitPublic: true,
|
||||
temperature: 1,
|
||||
history: 2,
|
||||
history: 3,
|
||||
rule: 'a tired game host',
|
||||
rulePublic: true,
|
||||
},
|
||||
|
|
|
@ -55,7 +55,7 @@ function setHistory(value, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
context.logger.info(`Chat history must be a valid number between 0 and 10, ${context.user.prefixedUsername}`);
|
||||
context.sendMessage(`Chat history must be a valid number between 0 and 10, ${context.user.prefixedUsername}`, context.room.id, { label: false });
|
||||
}
|
||||
|
||||
function setReplyWordLimit(value, context) {
|
||||
|
@ -66,7 +66,7 @@ function setReplyWordLimit(value, context) {
|
|||
|
||||
const newReplyWordLimit = Number(value);
|
||||
|
||||
if (!Number.isNaN(newReplyWordLimit) && newReplyWordLimit > 3 && newReplyWordLimit <= 200) {
|
||||
if (!Number.isNaN(newReplyWordLimit) && newReplyWordLimit >= 3 && newReplyWordLimit <= 200) {
|
||||
settings.replyWordLimit = newReplyWordLimit;
|
||||
|
||||
context.logger.info(`Chat reply word limit set to ${newReplyWordLimit} by ${context.user.username}`);
|
||||
|
@ -75,7 +75,7 @@ function setReplyWordLimit(value, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
context.logger.info(`Chat reply word limit must be a valid number between 3 and 200, ${context.user.prefixedUsername}`);
|
||||
context.sendMessage(`Chat reply word limit must be a valid number between 3 and 200, ${context.user.prefixedUsername}`, context.room.id, { label: false });
|
||||
}
|
||||
|
||||
function setTemperature(value, context) {
|
||||
|
@ -95,7 +95,7 @@ function setTemperature(value, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
context.logger.info(`Chat temperature must be a valid number between 0 and 2, ${context.user.prefixedUsername}`);
|
||||
context.sendMessage(`Chat temperature must be a valid number between 0 and 2, ${context.user.prefixedUsername}`, context.room.id, { label: false });
|
||||
}
|
||||
|
||||
function setModel(model, context) {
|
||||
|
@ -113,7 +113,7 @@ function setModel(model, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
context.logger.info(`Model '${model}' is not supported right now, ${context.user.prefixedUsername}`);
|
||||
context.sendMessage(`Model '${model}' is not supported right now, ${context.user.prefixedUsername}`, context.room.id, { label: false });
|
||||
}
|
||||
|
||||
function setRule(rule, context) {
|
||||
|
@ -153,6 +153,16 @@ async function getTokens(username) {
|
|||
return usedTokens || 0;
|
||||
}
|
||||
|
||||
async function resetTokens(username) {
|
||||
if (!username) {
|
||||
return;
|
||||
}
|
||||
|
||||
await knex('chat_tokens')
|
||||
.where('user_id', username)
|
||||
.delete();
|
||||
}
|
||||
|
||||
async function onCommand(args, context) {
|
||||
if (context.subcommand === 'history' && config.operators.includes(context.user.username)) {
|
||||
setHistory(args[0], context);
|
||||
|
@ -169,7 +179,7 @@ async function onCommand(args, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (['rule', 'is', 'be', 'ur', 'reset'].includes(context.subcommand) && (config.chat.rulePublic || config.operators.includes(context.user.username))) {
|
||||
if (['rule', 'is', 'be', 'ur'].includes(context.subcommand) && (config.chat.rulePublic || config.operators.includes(context.user.username))) {
|
||||
setRule(context.subcommand === 'reset' ? 'reset' : args.join(' '), context);
|
||||
return;
|
||||
}
|
||||
|
@ -188,6 +198,16 @@ async function onCommand(args, context) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (context.subcommand === 'reset' && config.operators.includes(context.user.username)) {
|
||||
const username = args[0] ? args[0].replace(new RegExp(`^${config.usernamePrefix}`), '') : context.user.username;
|
||||
|
||||
await resetTokens(username);
|
||||
|
||||
context.sendMessage(args[0] ? `Chat tokens reset for ${style.bold(username)}` : 'Chat tokens reset', context.room.id, { label: false });
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const prompt = args.join(' ');
|
||||
|
||||
try {
|
||||
|
@ -202,7 +222,9 @@ async function onCommand(args, context) {
|
|||
|
||||
const message = {
|
||||
role: 'user',
|
||||
content: `Using ${settings.replyWordLimit} words or fewer, answer as if you're ${settings.rule}. ${prompt}`,
|
||||
content: settings.replyWordLimit
|
||||
? `Using ${settings.replyWordLimit} words or fewer, answer as if you're ${settings.rule}. ${prompt}`
|
||||
: `Answer as if you're ${settings.rule}. ${prompt}`,
|
||||
};
|
||||
|
||||
const userHistory = (history.get(context.user.username) || []).concat(message);
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
'use strict';
|
||||
|
||||
const config = require('config');
|
||||
const { evaluate } = require('mathjs');
|
||||
|
||||
const games = new Map();
|
||||
|
||||
function getBoard(context) {
|
||||
const game = games.get(context.room.id);
|
||||
|
||||
return game;
|
||||
}
|
||||
|
||||
function pickNumbers(type, context) {
|
||||
const game = games.get(context.room.id);
|
||||
|
||||
if (!game) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('pick', type);
|
||||
}
|
||||
|
||||
function playSolution(solution, context) {
|
||||
|
||||
}
|
||||
|
||||
function start(context) {
|
||||
if (games.has(context.room.id)) {
|
||||
context.sendMessage(`${getBoard(context)} This is the current board. Use ${config.prefix}numbers:stop to reset.`);
|
||||
return;
|
||||
}
|
||||
|
||||
games.set(context.room.id, {
|
||||
state: 'pick',
|
||||
});
|
||||
|
||||
context.sendMessage('Let\'s play the numbers! Would you like a big number or a small one?', context.room.id);
|
||||
}
|
||||
|
||||
function onCommand(args, context) {
|
||||
if (!args.subcommand) {
|
||||
start(context);
|
||||
}
|
||||
}
|
||||
|
||||
function onMessage(message, context) {
|
||||
console.log('message', message.body);
|
||||
|
||||
const game = games.get(context.room.id);
|
||||
|
||||
if (game?.state === 'pick') {
|
||||
const multi = message.body.match(/\b[bs]{2,}\b/i)?.[0];
|
||||
|
||||
if (multi) {
|
||||
pickNumbers(multi.toLowerCase(), context);
|
||||
return;
|
||||
}
|
||||
|
||||
if (/big/i.test(message.body)) {
|
||||
pickNumbers('big', context);
|
||||
return;
|
||||
}
|
||||
|
||||
if (/small/i.test(message.body)) {
|
||||
pickNumbers('small', context);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (game?.state === 'solutions') {
|
||||
playSolution(message.body);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
onCommand,
|
||||
onMessage,
|
||||
};
|
Loading…
Reference in New Issue