d201a91d41
Misc.isElectedUser renvoit true pour un seul MJ connecté, ou le joueur connecté s'il n'y a pas de MJ. Ca veut dire que sans MJ, les messages de combat ne marcheront peut-être pas, mais pour tous les autres cas, ça marchera correctement, vu que ce sera toujours un MJ qui postera le message de défense au joueur (connecté ou pas) et au MJ
116 lines
3.6 KiB
JavaScript
116 lines
3.6 KiB
JavaScript
import { Misc } from "./misc.js";
|
|
|
|
/**
|
|
* Class providing helper methods to get the list of users, and
|
|
*/
|
|
export class ChatUtility {
|
|
|
|
/* -------------------------------------------- */
|
|
static onSocketMessage(sockmsg) {
|
|
switch (sockmsg.msg) {
|
|
case "msg_delete_chat_message": return ChatUtility.onRemoveMessages(sockmsg.data);
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static onRemoveMessages(data) {
|
|
if (Misc.isElectedUser()) {
|
|
if (data.part) {
|
|
const toDelete = game.messages.filter(it => it.data.content.includes(data.part));
|
|
toDelete.forEach(it => it.delete());
|
|
}
|
|
if (data.messageId) {
|
|
game.messages.get(data.messageId)?.delete();
|
|
}
|
|
}
|
|
else {
|
|
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_delete_chat_message", data: data });
|
|
}
|
|
}
|
|
|
|
|
|
/* -------------------------------------------- */
|
|
static removeChatMessageContaining(part) {
|
|
ChatUtility.onRemoveMessages({ part: part });
|
|
}
|
|
|
|
static removeChatMessageId(messageId) {
|
|
ChatUtility.onRemoveMessages({ messageId: messageId });
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static createChatWithRollMode(name, chatOptions) {
|
|
ChatUtility.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static createChatMessage(name, rollMode, chatOptions) {
|
|
switch (rollMode) {
|
|
case "blindroll": // GM only
|
|
if (!game.user.isGM) {
|
|
ChatUtility.blindMessageToGM(chatOptions);
|
|
|
|
chatOptions.whisper = [game.user.id];
|
|
chatOptions.content = "Message envoyé en aveugle au Gardien";
|
|
}
|
|
else {
|
|
chatOptions.whisper = ChatUtility.getUsers(user => user.isGM);
|
|
}
|
|
break;
|
|
default:
|
|
chatOptions.whisper = ChatUtility.getWhisperRecipients(rollMode, name);
|
|
break;
|
|
}
|
|
chatOptions.alias = chatOptions.alias || name;
|
|
ChatMessage.create(chatOptions);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static prepareChatMessage(rollMode, name) {
|
|
return {
|
|
user: game.user.id,
|
|
whisper: ChatUtility.getWhisperRecipients(rollMode, name)
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static getWhisperRecipients(rollMode, name) {
|
|
switch (rollMode) {
|
|
case "blindroll": return ChatUtility.getUsers(user => user.isGM);
|
|
case "gmroll": return ChatUtility.getWhisperRecipientsAndGMs(name);
|
|
case "selfroll": return [game.user.id];
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static getWhisperRecipientsAndGMs(name) {
|
|
return ChatMessage.getWhisperRecipients(name)
|
|
.concat(ChatMessage.getWhisperRecipients('GM'));
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static getUsers(filter) {
|
|
return game.users.filter(filter).map(user => user.data._id);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static blindMessageToGM(chatOptions) {
|
|
let chatGM = duplicate(chatOptions);
|
|
chatGM.whisper = ChatUtility.getUsers(user => user.isGM);
|
|
chatGM.content = "Message aveugle de " + game.user.name + "<br>" + chatOptions.content;
|
|
console.log("blindMessageToGM", chatGM);
|
|
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_gm_chat_message", data: chatGM });
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static handleGMChatMessage(data) {
|
|
console.log("blindMessageToGM", data);
|
|
if (game.user.isGM) { // message privé pour GM only
|
|
data.user = game.user.id;
|
|
ChatMessage.create(data);
|
|
}
|
|
}
|
|
|
|
}
|