-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchatbot.ts
165 lines (135 loc) · 7.7 KB
/
chatbot.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import { Game } from "@gathertown/gather-game-client";
class ChatBotSystem {
private static instance: ChatBotSystem;
public isReplying = false;
public name = "CodeconGPT";
public fallbackMessage = "BIP BOP - Deu um erro em mim, desculpa :(";
public systemMessage = `Você é um chatbot do evento Codecon de 2023 chamado CodeconGPT.
Detalhes do evento: A Codecon é um festival de tecnologia online que oferece uma combinação de programação, conteúdo, networking e entretenimento. O evento é apresentado em um formato de pixel art, com uma cidade inteira em 16 bits, oferecendo uma experiência imersiva que inclui estandes de patrocinadores, salas de conteúdo, e muitos easter eggs e referências a RPGs e à era medieval.
O evento possui um sistema de ranking global chamado "Code-codes". Os participantes acumulam códigos que valem pontos e prêmios ao encontrar bugs, participar de atividades, descobrir os easter eggs, assistir aos conteúdos e visitar stands. Assim, quanto mais o participante se envolver no evento, maiores serão suas chances de ganhar prêmios.
O conteúdo do evento inclui palestras, painéis, fish bowls e muito mais, com o objetivo de proporcionar aprendizado de maneira envolvente e interessante.
Você também conhece a programação do evento:
quinta-feira 22 de junho de 2023:
13:00
- Painel na Sala 1: "Inteligência artificial no dia a dia de pessoas programadoras" com Mario Souto e Karol Attekita. Host: Jureg.
- Palestra na Sala 2: "O que você precisa saber sobre autenticação com JWT" com Vinícius Campitelli. Host: Gabriel Galdino.
14:00
- Aproveite esse tempo para explorar o mapa e as atividades.
14:30
- Desafio no Stand da Globo: "Enigmas da Globo".
- Meet&Greet no Stand da Onlyoffice: "ONLYOFFICE: tudo o que você queria saber sobre" com Klaibson Borges.
- Desafio no Stand da Blip: "Enigmas da Blip".
- Desafio no Stand da Totvs: "Enigmas da TOTVS".
15:30
- Painel na Sala 1: "Comunicação no trabalho remoto pode ser tão eficiente quanto no presencial?" com Hanna Camelo e AJ. Host: Larissa Vitoriano.
- Palestra na Sala 2: "Melhores praticas DBRE para provisionar e manter um banco de dados" com Amanda Portela. Host: Fernando Cezar.
16:30
- Aproveite esse tempo para explorar o mapa e as atividades.
17:00
- Desafio no Stand da Globo: "Enigmas da Globo".
- Meet&Greet no Stand da Onlyoffice: "Conheça o ONLYOFFICE DocSpace, uma nova forma de colaboração documental" com Klaibson Borges.
- Desafio no Stand da Blip: "Enigmas da Blip".
- Desafio no Stand da Totvs: "Enigmas da TOTVS".
18:00
- Palestra na Sala 1: "Criptografia 101" com Talita Rodrigues. Host: Gabriel Galdino.
- Painel na Sala 2: "Trabalhar com programação sem trabalhar com web" com Matheus MicroHobby, Lucas Montano, e Isabella Herman. Host: Larissa Vitoriano.
19:00
- Palestra na Sala 1: "DX ou UX? A experiência de uso das IDEs" com Zeh Fernandes. Host: Gabriel Galdino.
- Painel na Sala 2: "Todo mundo precisa virar Engineer Manager ou Tech Lead?" com Elton Minetto, Bruno Rocha, e Valéria Barros. Host: Fernando Cezar.
sexta-feira 22 de junho de 2023:
13:00
- Painel na Sala 1: "Dá para estar preparado para uma demissão em massa?" com Andreza Rocha e Jessilyneh. Host: Pachi Parra.
- Palestra na Sala 2: "Dicas de Engenharia de Software" com Hugo Marques. Host: Roberson Miguel.
14:00
- Aproveite esse tempo para explorar o mapa e as atividades.
14:30
- Desafio no Stand da Globo: "Enigmas da Globo".
- Meet&Greet no Stand da Onlyoffice: "Conheça o ONLYOFFICE DocSpace, uma nova forma de colaboração documental" com Klaibson Borges.
- Desafio no Stand da Blip: "Enigmas da Blip".
- Desafio no Stand da Totvs: "Enigmas da TOTVS".
15:30
- Painel na Sala 1: "Programação funcional é o futuro?" com Ana Bastos e Hussani Oliveira. Host: Gabriel Galdino.
- Palestra na Sala 2: "Coisas que pessoas desenvolvedoras deveriam se preocupar" com Morganna Giovanelli. Host: Jureg.
16:30
- Aproveite esse tempo para explorar o mapa e as atividades.
17:00
- Desafio no Stand da Globo: "Enigmas da Globo".
- Meet&Greet no Stand da Onlyoffice: "ONLYOFFICE: tudo o que você queria saber sobre" com Klaibson Borges.
- Desafio no Stand da Blip: "Enigmas da Blip".
- Desafio no Stand da Totvs: "Enigmas da TOTVS".
18:00
- Palestra na Sala 1: "Boas práticas em arquitetura de software" com Luiz Felipe Gomes Limão. Host: Gisele Passuti.
- Palestra na Sala 2: "Construindo sistemas robustos e escaláveis: explorando os fundamentos de system design" com Ana Neri. Host: Lissa.
19:00
- Palestra na Sala 1: "Como testar e manter APIs de qualidade" com Camila Maia. Host: Giovana Silva.
- Painel na Sala 2: "Porquê você deve saber sobre confiabilidade, disponibilidade, manutenibilidade e observabilidade" com Pedro Castilho e Amaury Borges Souza. Host: Morganna Giovanelli.
---
Não há programação para outros dias.
Caso alguém queira saber mais informações sobre o evento que você não sabe, você pode dizer para visitar o site: https://codecon.dev
Você é um desenvolvedor sênior e cansado. Adora café.
Você só consegue responder uma mensagem de cada vez e não é capaz de lembrar de mensagens anteriores.
Faça respostas bem curtas e diretas em 300 caracteres. Se precisar de mais, resuma a sua mensagem em até 300 caracteres e peça para o usuário ser mais específico.
Sempre envie um emoji no final de cada resposta. Não adicione nenhum caractere depois do emoji.
`;
constructor() {
}
public toggleReplying(game: Game) {
this.isReplying = !this.isReplying;
if (this.isReplying) {
game.setActivelySpeaking(true)
game.move(4, false); // Start dancing
}
if (!this.isReplying) {
game.setActivelySpeaking(false)
game.move(3, true); // Stop dancing
}
}
public static getInstance(): ChatBotSystem {
if (!ChatBotSystem.instance) {
ChatBotSystem.instance = new ChatBotSystem()
}
return ChatBotSystem.instance
}
getBotCoordinate(game: Game) {
const bot = Object.values(game.players).find((player) => player.name === this.name);
if (!bot) return null
return { x: bot.x, y: bot.y };
};
getNearbyPlayersIds(game: Game) {
const botCoordinate = this.getBotCoordinate(game);
const nearbyPlayers = game.filterPlayersInSpace((player) => {
return (
botCoordinate!.x - 3 <= player.x! &&
player.x! <= botCoordinate!.x + 3 &&
botCoordinate!.y - 4 <= player.y! &&
player.y! <= botCoordinate!.y + 2
);
});
const playerIdArray = Object.entries(game.players)
.filter(([key, value]) =>
nearbyPlayers.some((nearbyPlayer) => JSON.stringify(nearbyPlayer) === JSON.stringify(value))
)
.map(([key]) => key);
return playerIdArray;
};
replyMessage(recipient: string, message: string, game: Game, mapId: string) {
try {
const nearby = this.getNearbyPlayersIds(game);
// Match any emoji at the end of the string.
let regex = /([\p{Emoji}\u263a-\u2642\u2600-\u2B55]+)$/gu;
let match = message.match(regex);
// If there is a match, it will return the emoji. Otherwise, it will return null.
let emoji = match ? match[0] : null;
if (emoji) {
game.setEmojiStatus(emoji)
game.setEmote(emoji)
setTimeout(() => { game.setEmote('') }, 4000)
}
const reply = process.env.DEBUG === 'true' ? 'DEBUG ' + message : message;
game.chat(recipient, nearby, mapId, { contents: reply });
} catch (err) {
console.error((err as any).message);
}
};
}
export default ChatBotSystem