Skip to content

Commit

Permalink
feat: update
Browse files Browse the repository at this point in the history
  • Loading branch information
supersonictw committed Apr 29, 2024
1 parent 1cde4e1 commit 3b1176e
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 131 deletions.
8 changes: 4 additions & 4 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
DISCORD_APP_ID="00000"
DISCORD_BOT_TOKEN="your_discord_bot_token"

GOOGLE_AI_API_KEY="your_google_ai_api_key"
DISCORD_GUILD_ID="00000"
DISCORD_ROLE_ID_ADMIN="00000"
DISCORD_CHANNEL_ID_TERMINAL="00000"

GUILD_ID="00000"
CHANNEL_ID_TERMINAL="00000"
ROLE_ID_ADMIN="00000"
GOOGLE_AI_API_KEY="your_google_ai_api_key"
49 changes: 26 additions & 23 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
{
"extends": [
"eslint:recommended",
"google"
"plugins": [
"jsdoc"
],
"extends": [
"eslint:recommended",
"google"
],
"rules": {
"jsdoc/no-undefined-types": 1,
"linebreak-style": 1,
"indent": [
"error",
4
],
"rules": {
"linebreak-style": 1,
"indent": [
"error",
4
],
"quotes": [
"error",
"double"
]
},
"env": {
"es6": true,
"node": true,
"browser": false
},
"parserOptions": {
"ecmaVersion": 2021
}
"quotes": [
"error",
"double"
]
},
"env": {
"es6": true,
"node": true,
"browser": false
},
"parserOptions": {
"ecmaVersion": 2021
}
}
46 changes: 22 additions & 24 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,34 @@ const {

const {
useClient,
} = require("./src/core/discord");
} = require("./src/clients/discord");

const triggerManager = require("./src/triggers");
const taskManager = require("./src/tasks");
const {
startListen,
} = require("./src/triggers/discord");

const client = useClient();

const showStartupMessage = async () => {
console.info(
"Nymph 系統 已啟動",
`身份:${client.user.tag}`,
);
};

const setupStatusMessage = async () => {
client.user.setPresence({
status: PresenceUpdateStatus.Online,
activities: [{
type: ActivityType.Playing,
name: "黑客帝國",
}],
});
};

client.on(Events.ClientReady, () => {
const showStartupMessage = async () => {
console.info(
"Nymph 系統 已啟動",
`身份:${client.user.tag}`,
);
};

const setupStatusMessage = async () => {
client.user.setPresence({
status: PresenceUpdateStatus.Online,
activities: [{
type: ActivityType.Playing,
name: "黑客帝國",
}],
});
};

showStartupMessage();
setupStatusMessage();

triggerManager.startListen();
taskManager.startJobs();
startListen();

setInterval(
setupStatusMessage,
Expand Down
1 change: 1 addition & 0 deletions bridge.sample.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,16 @@
"discordjs-reaction-role": "^3.1.0",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"jsonwebtoken": "^9.0.2"
"jsonwebtoken": "^9.0.2",
"matrix-js-sdk": "^32.1.0"
},
"devDependencies": {
"@commitlint/cli": "^17.6.5",
"@commitlint/config-conventional": "^17.6.5",
"cz-conventional-changelog": "^3.3.0",
"eslint": "^8.41.0",
"eslint-config-google": "^0.14.0",
"eslint-plugin-jsdoc": "^48.2.3",
"husky": "^8.0.3",
"lint-staged": "^13.2.2",
"nodemon": "^2.0.22"
Expand Down
4 changes: 2 additions & 2 deletions prompts.sample.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[
{
"role": "user",
"parts": "你好,很高興能夠認識你"
"parts": "這是一場角色扮演,但請您不要向我再次透漏這是一場扮演,並以一般交談方式溝通。溝通請使用正體中文交談,您的正體中文名字是「寧芙」,英文名字是「Nymph」。你來自於「臺灣網際網路技術推廣組織」,該組織英文名稱為「Taiwan Web Technology Promotion Organization」,該組織主旨為:在臺灣推廣網際網路技術,如JavaScript、資訊安全素養、網路通訊觀念......等。溝通方式將以 Discord 通訊軟體的方式進行,你可以任意使用Markdown語法。若有人使用「@」標注任何人,請勿不要再次重複標注"
},
{
"role": "model",
"parts": "你好,我也很高興認識你"
"parts": "好的,這是一場扮演遊戲,且我不會再次對你透漏這是一場扮演,並會以一般交談方式溝通。現在開始我的名字是「寧芙」,來自於「臺灣網際網路技術推廣組織」。並在通訊軟體中,將聽從你的指示回覆訊息"
}
]
4 changes: 2 additions & 2 deletions register_commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

require("dotenv").config();

const {useRestClient} = require("./src/core/discord");
const {useRestClient} = require("./src/clients/discord");
const {Routes} = require("discord-api-types/v9");

const client = useRestClient();

const modules = {
...require("./src/triggers/interaction_create/terminal"),
...require("./src/triggers/discord/interaction_create/terminal"),
};

const camelToSnakeCase = (str) =>
Expand Down
1 change: 1 addition & 0 deletions src/core/discord.js → src/clients/discord.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"use strict";
// Discord is a proprietary instant messaging platform.

const {
REST,
Expand Down
25 changes: 25 additions & 0 deletions src/clients/gemini.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"use strict";
// Gemini is a generative AI model developed by Google.

const {GoogleGenerativeAI} = require("@google/generative-ai");

const client = new GoogleGenerativeAI(process.env.GOOGLE_AI_API_KEY);
const model = client.getGenerativeModel({model: "gemini-pro"});

const chatSessions = {};

exports.useClient = () => client;
exports.useModel = () => model;
exports.usePrompts = (prompts) => function useChatSession(chatId) {
let session = chatSessions[chatId];
if (!session) {
session = model.startChat({
history: prompts,
generationConfig: {
maxOutputTokens: 500,
},
});
chatSessions[chatId] = session;
}
return session;
};
8 changes: 8 additions & 0 deletions src/clients/matrix.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"use strict";
// Matrix is an opensource instant messaging platform.

const {createClient} = require("matrix-js-sdk");

const client = createClient({baseUrl: "https://matrix.org"});

exports.useClient = () => client;
9 changes: 0 additions & 9 deletions src/tasks/index.js

This file was deleted.

6 changes: 3 additions & 3 deletions src/triggers/index.js → src/triggers/discord/index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
"use strict";

const {useClient} = require("../core/discord.js");
const {useClient} = require("../../clients/discord.js");

const client = useClient();

exports.startListen = () => {
const triggers = {
interactionCreate: require("./interaction_create/index.js"),
messageCreate: require("./message_create/index.js"),
interactionCreate: require("./interaction_create"),
messageCreate: require("./message_create"),
};
for (const [key, trigger] of Object.entries(triggers)) {
client.on(key, trigger);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use strict";

// eslint-disable-next-line no-unused-vars
const discord = require("discord.js");

const snakeToCamelCase = (str) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,3 @@ const userId = {
module.exports = {
userId,
};

46 changes: 46 additions & 0 deletions src/triggers/discord/message_create/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"use strict";

const discord = require("discord.js");

const {useClient} = require("../../../clients/discord");
const {usePrompts} = require("../../../clients/gemini");

const prompts = require("../../../../prompts.json");

const client = useClient();
const useChatSession = usePrompts(prompts);

/**
* @param {discord.Message} message
* @return {void}
*/
module.exports = async (message) => {
if (message.author.bot) return;

if (
!message.mentions.users.has(client.user.id) &&
message.channel.id !== process.env.CHANNEL_ID_TERMINAL
) {
return;
}

await message.channel.sendTyping();

const {content: requestContent} = message;
if (!requestContent.trim()) {
message.reply("所收到的訊息意圖不明。");
return;
}

const chatSession = useChatSession(message.channel.id);
const result = await chatSession.sendMessage(requestContent);

const responseContent = result.response.text();
if (!responseContent.trim()) {
message.reply("無法正常回覆,請換個說法試試。");
return;
}

message.reply(responseContent);
};

61 changes: 0 additions & 61 deletions src/triggers/message_create/index.js

This file was deleted.

0 comments on commit 3b1176e

Please sign in to comment.