+
+
@@ -30,14 +26,16 @@ function send() {
:me="store.clientInfo.nick"
/>
-
+
+
+
+
+
+
+
+
+
+
diff --git a/irchad-web/src/components/UserCard.vue b/irchad-web/src/components/UserCard.vue
new file mode 100644
index 0000000..b4badb7
--- /dev/null
+++ b/irchad-web/src/components/UserCard.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ clientInfo.nick }}
+
+
+
+
diff --git a/irchad-web/src/stores/irc.js b/irchad-web/src/stores/irc.js
index c23be55..ac39ca1 100644
--- a/irchad-web/src/stores/irc.js
+++ b/irchad-web/src/stores/irc.js
@@ -13,6 +13,17 @@ export const useIRCStore = defineStore("irc", () => {
gecos: "IrChad",
});
+ const selfAvatar = ref("https://placekittens.com/128/128");
+
+ function setAvatar(v) {
+ selfAvatar.value = v;
+ client.raw(`METADATA * SET avatar ${selfAvatar.value}`);
+ }
+
+ function setNick(v) {
+ client.changeNick(v);
+ }
+
const buffers = ref({});
const activeBufferName = ref();
const metadata = ref({});
@@ -87,7 +98,18 @@ export const useIRCStore = defineStore("irc", () => {
client.on("registered", function () {
client.list();
client.raw("METADATA * SUB avatar");
- client.raw("METADATA * SET avatar https://placekittens.com/128/128");
+ client.raw(`METADATA * SET avatar ${selfAvatar.value}`);
+ });
+
+ client.on("nick", function ({ nick, new_nick }) {
+ if (nick === clientInfo.value.nick) {
+ clientInfo.value.nick = new_nick;
+ }
+ for (let buff of Object.values(buffers.value)) {
+ const idx = buff.users.findIndex((u) => u.nick === nick);
+ if (idx === -1) continue;
+ buff.users[idx].nick = new_nick;
+ }
});
client.on("unknown command", function (ircCommand) {
@@ -192,5 +214,8 @@ export const useIRCStore = defineStore("irc", () => {
setActiveBuffer,
getMetadata,
metadata,
+ selfAvatar,
+ setAvatar,
+ setNick,
};
});