Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
6e6d1e8
feat(defaults): add configs defaults
Darosss Mar 4, 2023
9470b74
feat(type): add defaults IConfigDefaults type
Darosss Mar 4, 2023
90a4a65
fix: add proper import path
Darosss Mar 4, 2023
09120c3
feat(ITrigger): add uses field
Darosss Mar 4, 2023
bbca9cd
refactor(model): rename useCount to uses, remove logs
Darosss Mar 4, 2023
a620524
feat(model): add usage of defaults module
Darosss Mar 4, 2023
b96c312
feat(model): add default Maps
Darosss Mar 4, 2023
fa551c1
feat(model): add uses field
Darosss Mar 4, 2023
a4d05b7
refactor(model): remove commented line
Darosss Mar 4, 2023
074f0c6
feat(service): add getChatCommandsAliases
Darosss Mar 4, 2023
e03768f
feat(service): add getTriggerById
Darosss Mar 4, 2023
3b5f77b
feat(service): add getOneTrigger
Darosss Mar 4, 2023
d46b1cf
feat(service): add getTriggersWords
Darosss Mar 4, 2023
690779a
chore(tsconfig): add defaults path
Darosss Mar 4, 2023
60ae6ea
chore(package): add defaults module alias
Darosss Mar 4, 2023
0f1d6f4
feat(util): add loggers for StreamHandlers'
Darosss Mar 4, 2023
e901476
feat: add types
Darosss Mar 4, 2023
71b4ae0
refactor: separate logic to other clasess
Darosss Mar 4, 2023
fcf7e00
feat: add TriggersHandler
Darosss Mar 4, 2023
d80164b
feat: add MessagesHandler
Darosss Mar 4, 2023
bcb7cde
feat: add LoyaltyHandler
Darosss Mar 4, 2023
325954b
feat: add HeadHandler
Darosss Mar 4, 2023
e206503
feat: add CommandsHandler
Darosss Mar 4, 2023
3cfed52
refactor: rename class to StreamHandler
Darosss Mar 4, 2023
d9ac26b
refactor: add usage of streamHandler method
Darosss Mar 4, 2023
5ce369f
chore(gitignore): add *.temp.* files
Darosss Mar 4, 2023
af7fdf8
feat(type): add usage of Partial, Omit, Pick
Darosss Mar 4, 2023
b715e76
feat: add usage of triggers modes
Darosss Mar 4, 2023
f7f9c51
feat(model): add mode field'
Darosss Mar 4, 2023
89bb3d8
feat(ITrigger): add mode property
Darosss Mar 4, 2023
9f49d04
refactor: move functions to checkMessageForTrigger
Darosss Mar 4, 2023
8739bc3
feat: update logic and reset trigers on start bot
Darosss Mar 5, 2023
2b03c89
feat(service): add updateTriggers
Darosss Mar 5, 2023
b20c1af
feat: add socket alias type
Darosss Mar 6, 2023
cf59604
feat: add usage of socket alias type
Darosss Mar 6, 2023
a05b5cc
revert: revert add aliases
Darosss Mar 6, 2023
dacde63
revert: revert add aliases
Darosss Mar 6, 2023
3b0f322
feat: add refreshConfigs
Darosss Mar 6, 2023
a5445e5
feat: add refresh configs method
Darosss Mar 6, 2023
f61a3c4
feat: add refresh configs method
Darosss Mar 6, 2023
27a8732
feat: add new ClientToServerEvents
Darosss Mar 6, 2023
d54a868
feat: add headLogger
Darosss Mar 6, 2023
21a6598
feat: add handlers socket events
Darosss Mar 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ server/dist
server/node_modules
server/logs

*.temp.*

#FRONTEND

# dependencies
Expand Down
25 changes: 10 additions & 15 deletions libs/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
import { IUser } from "../../server/src/models/types";

interface IEvent {
export interface IEvent {
eventDate: Date;
eventName: string;
}

interface IEventAndIUser extends IEvent, IUser {}
interface ServerToClientEvents {
export interface IEventAndIUser extends IEvent, IUser {}
export interface ServerToClientEvents {
noArg: () => void;
withAck: (d: string, callback: (e: number) => void) => void;
messageServer: (date: Date, username: string, message: string) => void;
userJoinTwitchChat: (eventDate: IEvent, user: IUser) => void;
onRedemption: (data: ISoundData) => void;
}

interface ClientToServerEvents {
export interface ClientToServerEvents {
messageClient: (message: string) => void;
saveConfigs: () => void;
refreshTriggers: () => void;
refreshCommands: () => void;
}

interface InterServerEvents {
export interface InterServerEvents {
ping: () => void;
}

interface ISoundData {
export interface ISoundData {
rewardId: string;
userId: string;
userName: string;
Expand All @@ -33,12 +36,4 @@ interface ISoundData {
rewardImage: string;
}

interface SocketData {}

export {
ClientToServerEvents,
SocketData,
InterServerEvents,
ServerToClientEvents,
IEventAndIUser,
};
export interface SocketData {}
1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"@middlewares": "dist/middlewares",
"@utils": "dist/utils",
"@services": "dist/services",
"@defaults": "dist/defaults",
"@types": "@types"
}
}
22 changes: 22 additions & 0 deletions server/src/defaults/configsDefaults.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { IConfigDefaults } from "./types";

export const configDefaults: IConfigDefaults = {
commandsPrefix: "--",
timersIntervalDelay: 20,
activeUserTimeDelay: 150,
chatGamesIntervalDelay: 20,
minActiveUsersThreshold: 3,
intervalCheckChatters: 300,
pointsIncrement: {
message: 1,
watch: 10,
watchMultipler: 2.0,
},
intervalCheckViewersPeek: 600,
permissionLevels: {
broadcaster: 10,
mod: 8,
vip: 4,
all: 0,
},
};
4 changes: 4 additions & 0 deletions server/src/defaults/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { IConfig } from "@models/types";

export interface IConfigDefaults
extends Omit<IConfig, "_id" | "createdAt" | "updatedAt"> {}
3 changes: 1 addition & 2 deletions server/src/models/chatCommandModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { IChatCommandDocument } from "./types";
const ChatCommandSchema: Schema<IChatCommandDocument> = new Schema(
{
name: { type: String, required: true },
// createdAt: { type: Date, required: true, default: Date.now },
description: { type: String },
enabled: { type: Boolean, default: true },
aliases: [String],
Expand All @@ -15,7 +14,7 @@ const ChatCommandSchema: Schema<IChatCommandDocument> = new Schema(
min: 0,
max: 10,
},
useCount: {
uses: {
type: Number,
default: 0,
},
Expand Down
64 changes: 50 additions & 14 deletions server/src/models/configModel.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,61 @@
import { Model, model, Schema } from "mongoose";
import { IConfigDocument } from "./types";
import { configDefaults } from "../defaults/configsDefaults";
const {
commandsPrefix,
timersIntervalDelay,
activeUserTimeDelay,
chatGamesIntervalDelay,
minActiveUsersThreshold,
pointsIncrement,
intervalCheckChatters,
intervalCheckViewersPeek,
permissionLevels,
} = configDefaults;

const ConfigSchema: Schema<IConfigDocument> = new Schema(
{
commandsPrefix: { type: String, required: true, default: "--" },
timersIntervalDelay: { type: Number, required: true, default: 20 },
activeUserTimeDelay: { type: Number, required: true, default: 150 },
chatGamesIntervalDelay: { type: Number, required: true, default: 20 },
minActiveUsersThreshold: { type: Number, required: true, default: 3 },
intervalCheckChatters: { type: Number, required: true, default: 150 },
commandsPrefix: { type: String, required: true, default: commandsPrefix },
timersIntervalDelay: {
type: Number,
required: true,
default: timersIntervalDelay,
},
activeUserTimeDelay: {
type: Number,
required: true,
default: activeUserTimeDelay,
},
chatGamesIntervalDelay: {
type: Number,
required: true,
default: chatGamesIntervalDelay,
},
minActiveUsersThreshold: {
type: Number,
required: true,
default: minActiveUsersThreshold,
},
intervalCheckChatters: {
type: Number,
required: true,
default: intervalCheckChatters,
},
pointsIncrement: {
message: { type: Number, default: 1 },
watch: { type: Number, default: 10 },
watchMultipler: { type: Number, default: 2.0 },
message: { type: Number, default: pointsIncrement.message },
watch: { type: Number, default: pointsIncrement.watch },
watchMultipler: { type: Number, default: pointsIncrement.watchMultipler },
},
intervalCheckViewersPeek: {
type: Number,
required: true,
default: intervalCheckViewersPeek,
},
intervalCheckViewersPeek: { type: Number, required: true, default: 600 },
permissionLevels: {
broadcaster: { type: Number, default: 10 },
mod: { type: Number, default: 8 },
vip: { type: Number, default: 4 },
all: { type: Number, default: 0 },
broadcaster: { type: Number, default: permissionLevels.broadcaster },
mod: { type: Number, default: permissionLevels.mod },
vip: { type: Number, default: permissionLevels.vip },
all: { type: Number, default: permissionLevels.all },
},
},
{
Expand Down
7 changes: 6 additions & 1 deletion server/src/models/streamSessionModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,32 @@ import { Model, model, Schema } from "mongoose";
import { IStreamSessionDocument } from "./types";

const StreamSessionSchema: Schema<IStreamSessionDocument> = new Schema({
sessionStart: { type: Date, required: true, default: new Date() },
sessionStart: { type: Date, required: true, default: Date.now },
sessionEnd: { type: Date },
sessionTitles: {
type: Map,
of: String,
default: new Map(),
},
categories: {
type: Map,
of: String,
default: new Map(),
},
tags: {
type: Map,
of: String,
default: new Map(),
},
viewers: {
type: Map,
of: Number,
default: new Map(),
},
watchers: {
type: Map,
of: Number,
default: new Map(),
},
});

Expand Down
4 changes: 2 additions & 2 deletions server/src/models/triggerModel.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { Model, model, Schema } from "mongoose";
import { ITriggerDocument } from "./types";

const TriggerSchema: Schema<ITriggerDocument> = new Schema(
{
name: { type: String, required: true },
enabled: { type: Boolean, default: true },
chance: { type: Number, default: 50 },
delay: { type: Number, default: 360 },
onDelay: { type: Boolean, default: false },
// createdAt: { type: Date, required: true, default: Date.now },
uses: { type: Number, default: 0 },
words: [String],
messages: [String],
mode: { type: String, default: "WHOLE-WORD" },
},
{ timestamps: true }
);
Expand Down
6 changes: 5 additions & 1 deletion server/src/models/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,17 +57,21 @@ export interface IStreamSession {

export type IStreamSessionDocument = IStreamSession & Document;

export type TTriggerMode = "WHOLE-WORD" | "STARTS-WITH" | "ALL";

export interface ITrigger {
_id: string;
name: string;
enabled: boolean;
chance: number;
delay: number;
onDelay: boolean;
uses: number;
words: string[];
messages: string[];
createdAt: Date;
updatedAt: Date;
mode: TTriggerMode;
}

export type ITriggerDocument = ITrigger & Document;
Expand Down Expand Up @@ -108,7 +112,7 @@ export interface IChatCommand {
aliases: string[];
messages: string[];
privilege: number;
useCount: number;
uses: number;
}

export type IChatCommandDocument = IChatCommand & Document;
Expand Down
62 changes: 62 additions & 0 deletions server/src/services/chatCommands/chatCommandsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,65 @@ export const deleteChatCommandById = async (id: string) => {
handleAppError(err);
}
};

export const getChatCommandsAliases = async (): Promise<
string[] | undefined
> => {
try {
const commandsAliases = await ChatCommand.aggregate([
{
$group: {
_id: null,
aliases: { $push: "$aliases" },
},
},
{
$project: {
aliases: {
$reduce: {
input: "$aliases",
initialValue: [],
in: { $concatArrays: ["$$value", "$$this"] },
},
},
_id: 0,
},
},
{
$unwind: "$aliases",
},
{
$addFields: {
aliasesLower: { $toLower: "$aliases" },
},
},
{
$sort: {
aliasesLower: 1,
},
},
{
$group: {
_id: null,
aliases: { $push: "$aliasesLower" },
},
},
{
$project: {
_id: 0,
aliases: 1,
},
},
]);

if (commandsAliases.length > 0) {
return commandsAliases[0].aliases;
}
return [];
} catch (err) {
logger.error(
`Error occured while aggregating chat commands for all aliases words: ${err}`
);
handleAppError(err);
}
};
Loading