Compare commits
4 Commits
3fd8dd9650
...
0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
6b3ec6517f
|
|||
|
3a4d5f8fae
|
|||
|
398163df18
|
|||
|
3295b9d77e
|
10
src/lang/en.json
Normal file
10
src/lang/en.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"SESSION_TITLE_SUGGESTIONS.SETTING_ROLE_HINT": "Select the minimum role required to use the /titles command.",
|
||||
"SESSION_TITLE_SUGGESTIONS.SETTING_ROLE_NAME": "List Titles Command Required Role",
|
||||
"SESSION_TITLE_SUGGESTIONS.INVALID_DATE": "Invalid date provided.",
|
||||
"SESSION_TITLE_SUGGESTIONS.SUGGESTION_AUTOCOMPLETE_MESSAGE": "Enter your session title suggestion.",
|
||||
"SESSION_TITLE_SUGGESTIONS.SUGGESTION_LIST_COMMAND_DESCRIPTION": "List all title suggestions for the provided date",
|
||||
"SESSION_TITLE_SUGGESTIONS.SUGGESTION_COMMAND_DESCRIPTION": "Suggest a title for this session",
|
||||
"SESSION_TITLE_SUGGESTIONS.SUGGESTION_FLAVOR": "suggesting a session title",
|
||||
"SESSION_TITLE_SUGGESTIONS.SUGGESTION_LIST_FLAVOR": "session title suggestions"
|
||||
}
|
||||
@@ -7,13 +7,20 @@
|
||||
"name": "lmxsdl"
|
||||
}
|
||||
],
|
||||
"version": "0.1.2",
|
||||
"version": "0.2",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "11"
|
||||
},
|
||||
"download": "https://gitea.ascorrea.com/asc/asc-session-title-suggestions/releases/download/0.1.2/asc-session-title-suggestions-0.1.2.zip",
|
||||
"manifest":"https://gitea.ascorrea.com/asc/asc-session-title-suggestions/raw/branch/master/src/module.json",
|
||||
"languages": [
|
||||
{
|
||||
"lang": "en",
|
||||
"name": "English",
|
||||
"path": "lang/en.json"
|
||||
}
|
||||
],
|
||||
"download": "https://gitea.ascorrea.com/asc/asc-session-title-suggestions/releases/download/0.2/module.zip",
|
||||
"manifest": "https://gitea.ascorrea.com/asc/asc-session-title-suggestions/releases/download/latest/module.json",
|
||||
"scripts": [
|
||||
"scripts/main.js"
|
||||
],
|
||||
|
||||
@@ -24,12 +24,11 @@ function registerClipboardCopyButton() {
|
||||
|
||||
|
||||
function registerCustomChatCommands() {
|
||||
game.chatCommands.unregister(NAME)
|
||||
game.chatCommands.register({
|
||||
name: NAME,
|
||||
module: "_chatcommands",
|
||||
aliases: ["/t", "t/"],
|
||||
description: "Suggest a title for this episode",
|
||||
description: game.i18n.localize("SESSION_TITLE_SUGGESTIONS.SUGGESTION_COMMAND_DESCRIPTION"),
|
||||
icon: '<i class="fa-solid fa-podcast"></i>',
|
||||
requiredRole: "NONE",
|
||||
callback: async (chat, parameters, messageData) => {
|
||||
@@ -40,55 +39,85 @@ function registerCustomChatCommands() {
|
||||
newMessageData.flags = {session_title_suggestion: titleSuggestion}
|
||||
return newMessageData;
|
||||
},
|
||||
autocompleteCallback: (menu, alias, parameters) => [game.chatCommands.createInfoElement("Enter a message.")],
|
||||
autocompleteCallback: (menu, alias, parameters) => [
|
||||
game.chatCommands.createInfoElement(game.i18n.localize("SESSION_TITLE_SUGGESTIONS.SUGGESTION_AUTOCOMPLETE_MESSAGE"))
|
||||
],
|
||||
closeOnComplete: true
|
||||
});
|
||||
}, true);
|
||||
|
||||
game.chatCommands.unregister(NAME+"s")
|
||||
game.chatCommands.register({
|
||||
name: NAME+"s",
|
||||
module: "_chatcommands",
|
||||
aliases: ["/ts"],
|
||||
description: "List all titles for the most recent episode",
|
||||
description: game.i18n.localize("SESSION_TITLE_SUGGESTIONS.SUGGESTION_LIST_COMMAND_DESCRIPTION"),
|
||||
icon: '<i class="fa-solid fa-podcast"></i>',
|
||||
requiredRole: "TRUSTED",
|
||||
requiredRole: game.settings.get("asc-session-title-suggestions", "titleListCommandRole"),
|
||||
callback: async (chat, parameters, messageData) => {
|
||||
const newMessageData = {}
|
||||
const suggestions = game.messages.filter(m => {
|
||||
return m.flags.session_title_suggestion
|
||||
})
|
||||
|
||||
const last_message_date = new Date(suggestions[suggestions.length-1].timestamp)
|
||||
let selected_message_date
|
||||
if (!parameters) {
|
||||
selected_message_date = new Date(suggestions[suggestions.length-1].timestamp)
|
||||
|
||||
} else {
|
||||
const epoch_date = Date.parse(parameters)
|
||||
if (Number.isNaN(epoch_date)){
|
||||
ui.notifications.error(`${game.i18n.localize("SESSION_TITLE_SUGGESTIONS.INVALID_DATE")} (${parameter})`);
|
||||
return;
|
||||
}
|
||||
selected_message_date = new Date(epoch_date)
|
||||
}
|
||||
const filtered_suggestions = suggestions.filter(m=>{
|
||||
const message_date = new Date(m.timestamp)
|
||||
return message_date.toDateString() == last_message_date.toDateString()
|
||||
return message_date.toDateString() == selected_message_date.toDateString()
|
||||
})
|
||||
newMessageData.content = await renderTemplate(TEMPLATES.suggestionList.content, {messages:filtered_suggestions })
|
||||
newMessageData.flavor = await renderTemplate(TEMPLATES.suggestionList.flavor, {date:last_message_date.toDateString()})
|
||||
newMessageData.flavor = await renderTemplate(TEMPLATES.suggestionList.flavor, {date:selected_message_date.toDateString()})
|
||||
return newMessageData;
|
||||
},
|
||||
autocompleteCallback: (menu, alias, parameters) => [game.chatCommands.createInfoElement("Enter a message.")],
|
||||
autocompleteCallback: (menu, alias, parameters) => {
|
||||
const suggestions = game.messages.filter(m => {
|
||||
return m.flags.session_title_suggestion
|
||||
})
|
||||
const dates = new Set(
|
||||
suggestions.map(s=>new Date(s.timestamp).toDateString())
|
||||
)
|
||||
const entries = [...dates].map(date=>{
|
||||
return game.chatCommands.createCommandElement(`${alias} ${date}`, date)
|
||||
})
|
||||
|
||||
entries.length = Math.min(entries.length, menu.maxEntries);
|
||||
return entries;
|
||||
},
|
||||
closeOnComplete: true
|
||||
});
|
||||
}, true);
|
||||
}
|
||||
|
||||
console.log("Hello World! This code runs immediately when the file is loaded.");
|
||||
|
||||
Hooks.on("init", function() {
|
||||
//This code runs once the Foundry VTT software begins its initialization workflow
|
||||
registerCustomChatCommands();
|
||||
registerClipboardCopyButton();
|
||||
loadTemplates(flavor_template_path)
|
||||
Object.values(TEMPLATES.suggestion).forEach((template_path)=>{
|
||||
loadTemplates(template_path)
|
||||
}
|
||||
)
|
||||
Object.values(TEMPLATES.suggestionList).forEach((template_path)=>{
|
||||
loadTemplates(template_path)
|
||||
}
|
||||
)
|
||||
Object.values(TEMPLATES.suggestion).forEach((template_path)=>loadTemplates(template_path))
|
||||
Object.values(TEMPLATES.suggestionList).forEach((template_path)=>loadTemplates(template_path))
|
||||
game.settings.register("asc-session-title-suggestions", "titleListCommandRole", {
|
||||
name: game.i18n.localize("SESSION_TITLE_SUGGESTIONS.SETTING_ROLE_NAME"),
|
||||
scope: "world",
|
||||
config: true,
|
||||
type: String,
|
||||
default: "TRUSTED",
|
||||
requiresReload: true,
|
||||
choices: {
|
||||
"PLAYER": game.i18n.localize("USER.RolePlayer"),
|
||||
"TRUSTED": game.i18n.localize("USER.RoleTrusted"),
|
||||
"ASSISTANT": game.i18n.localize("USER.RoleAssistant"),
|
||||
"GAMEMASTER": game.i18n.localize("USER.RoleGamemaster")
|
||||
},
|
||||
hint: game.i18n.localize("SESSION_TITLE_SUGGESTIONS.SETTING_ROLE_HINT")
|
||||
});
|
||||
});
|
||||
|
||||
Hooks.on("ready", function() {
|
||||
//This code runs once core initialization is ready and game data is available.
|
||||
registerCustomChatCommands();
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
<i class="fa-solid fa-podcast"></i> suggesting an session title...
|
||||
<i class="fa-solid fa-podcast"></i> {{localize 'SESSION_TITLE_SUGGESTIONS.SUGGESTION_FLAVOR'}}...
|
||||
@@ -1 +1 @@
|
||||
<i class="fa-solid fa-podcast"></i> title suggestions ({{date}}):
|
||||
<i class="fa-solid fa-podcast"></i> {{localize "SESSION_TITLE_SUGGESTIONS.SUGGESTION_LIST_FLAVOR"}} ({{date}}):
|
||||
Reference in New Issue
Block a user