Compare commits

..

7 Commits

Author SHA1 Message Date
Ean Milligan 631b0fdb7e deno fmt 2025-12-11 14:24:59 -05:00
Ean Milligan 924903f5e5 Add new Destiny 2 activities, fixes #5 2025-12-11 14:13:18 -05:00
Ean Milligan 617918d32d v2.0.1 minor update to fix deno.json 2025-07-24 03:22:09 -04:00
Ean Milligan ebe707ae26 !!BREAKING CHANGE!! This commit updates the Log4Deno dependency to support Deno 2.X, which means Deno 1.X is no longer supported. 2024-12-24 01:34:12 -05:00
Ean Milligan 6dab4b64b0 Add additional note to config.example.ts for discord IDs being bigints. 2024-12-24 01:13:45 -05:00
David Lau c7d12c25f4
Sanitize usernames for display (#4)
* Sanitize away underscores and asterisks for display names

* Bump version

* Bump version and date

* Formatting and rename param

* Un-raw dogged formatting

* lmao I don't know TS

* V1.1.6 - properly fix the formatting issue

---------

Co-authored-by: Ean Milligan <ean.milligan@gmail.com>
2024-07-10 00:54:12 -04:00
Ean Milligan b2c821991d V1.1.5
update member lists to prevent usernames with underscores from creating italics
2024-06-28 21:26:30 -04:00
6 changed files with 81 additions and 69 deletions

View File

@ -1,4 +1,4 @@
# Group Up - An Event Scheduling Discord Bot | V1.1.4 - 2024/06/18 # Group Up - An Event Scheduling Discord Bot | V2.0.1 - 2024/12/24
[![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-orange.svg)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-orange.svg)](https://sonarcloud.io/summary/new_code?id=GroupUp)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=bugs)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=bugs)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=GroupUp) [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=GroupUp&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=GroupUp)
@ -43,7 +43,12 @@ If you run into any errors or problems with the bot, or think you have a good id
--- ---
## Self Hosting Group Up ## Self Hosting Group Up
Group Up is built on [Deno](https://deno.land/) `v1.33.1` using [Discordeno](https://discordeno.mod.land/) `v17.0.1`. If you choose to run this yourself, you will need to rename `config.example.ts` to `config.ts` and edit some values. You will need to create a new [Discord Application](https://discord.com/developers/applications) and copy the newly generated token into the `"token"` field. If you want to utilize some of the bots dev features, you will need to fill in the keys `"logChannel"` and `"reportChannel"` with text channel IDs and `"devServer"` with a guild ID. Group Up is built on [Deno](https://deno.land/) using [Discordeno](https://discordeno.mod.land/) `v17.0.1`.
Group Up `V1.1.6` and lower requires Deno `V.33.1`.
Group Up `V2.0.0` and up requires Deno `V2.0.0`.
If you choose to run this yourself, you will need to rename `config.example.ts` to `config.ts` and edit some values. You will need to create a new [Discord Application](https://discord.com/developers/applications) and copy the newly generated token into the `"token"` field. If you want to utilize some of the bots dev features, you will need to fill in the keys `"logChannel"` and `"reportChannel"` with text channel IDs and `"devServer"` with a guild ID.
You will also need to install and setup a MySQL database with a user for the bot to use to add/modify the database. This user must have the `"DB Manager"` admin rights and `"REFERENCES"` Global Privileges. Once the DB is installed and a user is setup, run the provided `db\initialize.ts` to create the schema and tables. After this, run `db\populateDefaults.ts` to insert some needed values into the tables. You will also need to install and setup a MySQL database with a user for the bot to use to add/modify the database. This user must have the `"DB Manager"` admin rights and `"REFERENCES"` Global Privileges. Once the DB is installed and a user is setup, run the provided `db\initialize.ts` to create the schema and tables. After this, run `db\populateDefaults.ts` to insert some needed values into the tables.

View File

@ -1,41 +1,49 @@
export const config = { // !! NOTICE !! All fields below are required unless they are explicitly noted as OPTIONAL. If a field is OPTIONAL, do not remove it from this file, just leave it at the default value export const config = {
'name': 'Group Up', // Name of the bot // !! NOTICE !! All fields below are required unless they are explicitly noted as OPTIONAL. If a field is OPTIONAL, do not remove it from this file, just leave it at the default value
'version': '1.1.4', // Version of the bot name: 'Group Up', // Name of the bot
'token': 'the_bot_token', // Discord API Token for this bot version: '2.0.2', // Version of the bot
'localToken': 'local_testing_token', // Discord API Token for a secondary OPTIONAL testing bot, THIS SHOULD BE DIFFERENT FROM "token" token: 'the_bot_token', // Discord API Token for this bot
'prefix': '/', // Prefix for all commands, as this bot uses slash commands, this needs to be '/' localToken: 'local_testing_token', // Discord API Token for a secondary OPTIONAL testing bot, THIS SHOULD BE DIFFERENT FROM "token"
'db': { // Settings for the MySQL database, this is required to keep track of the currently active events. prefix: '/', // Prefix for all commands, as this bot uses slash commands, this needs to be '/'
'host': '', // IP address for the db, usually localhost db: {
'localhost': '', // IP address for a secondary OPTIONAL local testing DB, usually also is localhost, but depends on your dev environment // Settings for the MySQL database, this is required to keep track of the currently active events.
'port': 3306, // Port for the db host: '', // IP address for the db, usually localhost
'username': '', // Username for the account that will access your DB, this account will need "DB Manager" admin rights and "REFERENCES" Global Privileges localhost: '', // IP address for a secondary OPTIONAL local testing DB, usually also is localhost, but depends on your dev environment
'password': '', // Password for the account, user account may need to be authenticated with the "Standard" Authentication Type if this does not work out of the box port: 3306, // Port for the db
'name': '', // Name of the database Schema to use for the bot username: '', // Username for the account that will access your DB, this account will need "DB Manager" admin rights and "REFERENCES" Global Privileges
password: '', // Password for the account, user account may need to be authenticated with the "Standard" Authentication Type if this does not work out of the box
name: '', // Name of the database Schema to use for the bot
}, },
'links': { // Links to various sites links: {
'sourceCode': 'https://github.com/Burn-E99/GroupUp', // Link to the repository, OPTIONAL // Links to various sites
'supportServer': '', // Invite link to the Discord support server, OPTIONAL sourceCode: 'https://github.com/Burn-E99/GroupUp', // Link to the repository, OPTIONAL
'addToCalendar': '', // Link to where the icsGenerator is hosted, OPTIONAL supportServer: '', // Invite link to the Discord support server, OPTIONAL
'creatorIcon': '', // Link to where the GroupUpSinglePerson.png (or similar image) is hosted addToCalendar: '', // Link to where the icsGenerator is hosted, OPTIONAL
creatorIcon: '', // Link to where the GroupUpSinglePerson.png (or similar image) is hosted
}, },
'defaultDateFormat': 'MONTH/DAY/YEAR', // Default format that Group Up will suggest to the user. Must match one of the options in the 'DateTimeFormats' enum inside 'src/buttons/event-creation/dateTimeUtils.ts' defaultDateFormat: 'MONTH/DAY/YEAR', // Default format that Group Up will suggest to the user. Must match one of the options in the 'DateTimeFormats' enum inside 'src/buttons/event-creation/dateTimeUtils.ts'
'logChannel': 0n, // Discord channel ID where the bot should put startup messages and other error messages needed, OPTIONAL logChannel: 0n, // Discord channel ID where the bot should put startup messages and other error messages needed. This value is a bigint, so please ensure you have a `n` after the ID you get from Discord. OPTIONAL
'reportChannel': 0n, // Discord channel ID where reports will be sent when using the built-in report command, OPTIONAL reportChannel: 0n, // Discord channel ID where reports will be sent when using the built-in report command. This value is a bigint, so please ensure you have a `n` after the ID you get from Discord. OPTIONAL
'devServer': 0n, // Discord guild ID where testing of indev features/commands will be handled, used in conjunction with the DEVMODE bool in mod.ts, OPTIONAL devServer: 0n, // Discord guild ID where testing of indev features/commands will be handled, used in conjunction with the DEVMODE bool in mod.ts. This value is a bigint, so please ensure you have a `n` after the ID you get from Discord. OPTIONAL
'owner': 0n, // Discord user ID of the bot admin owner: 0n, // Discord user ID of the bot admin. This value is a bigint, so please ensure you have a `n` after the ID you get from Discord.
'botLists': [ // Array of objects containing all bot lists that stats should be posted to, OPTIONAL botLists: [
{ // Bot List object, duplicate for each bot list // Array of objects containing all bot lists that stats should be posted to, OPTIONAL
'name': 'Bot List Name', // Name of bot list, not used {
'enabled': false, // Should statistics be posted to this list? // Bot List object, duplicate for each bot list
'apiUrl': 'https://example.com/api/bots/?{bot_id}/stats', // API URL, use ?{bot_id} in place of the bot id so that it can be dynamically replaced name: 'Bot List Name', // Name of bot list, not used
'headers': [ // Array of headers that need to be added to the request enabled: false, // Should statistics be posted to this list?
{ // Header Object, duplicate for every header needed apiUrl: 'https://example.com/api/bots/?{bot_id}/stats', // API URL, use ?{bot_id} in place of the bot id so that it can be dynamically replaced
'header': 'header_name', // Name of header needed, usually Authorization is needed headers: [
'value': 'header_value', // Value for the header // Array of headers that need to be added to the request
{
// Header Object, duplicate for every header needed
header: 'header_name', // Name of header needed, usually Authorization is needed
value: 'header_value', // Value for the header
}, },
], ],
'body': { // Data payload to send to the bot list, will be turned into a string and any ?{} will be replaced with the required value, currently only has ?{server_count} body: {
'param_name': '?{param_value}', // Add more params as needed // Data payload to send to the bot list, will be turned into a string and any ?{} will be replaced with the required value, currently only has ?{server_count}
param_name: '?{param_value}', // Add more params as needed
}, },
}, },
], ],

View File

@ -1,42 +1,19 @@
{ {
"compilerOptions": { "compilerOptions": {
"allowJs": true, "lib": ["deno.window"],
"lib": [
"deno.window"
],
"strict": true "strict": true
}, },
"lint": { "lint": {
"files": { "include": ["src/", "db/", "mod.ts", "deps.ts", "config.ts", "config.example.ts"],
"include": [ "exclude": [],
"src/",
"db/",
"mod.ts",
"deps.ts",
"config.ts",
"config.example.ts"
],
"exclude": []
},
"rules": { "rules": {
"tags": [ "tags": ["recommended"],
"recommended" "include": ["ban-untagged-todo"],
],
"include": [
"ban-untagged-todo"
],
"exclude": [] "exclude": []
} }
}, },
"fmt": { "fmt": {
"include": [ "include": ["src/", "db/", "mod.ts", "deps.ts", "config.ts", "config.example.ts"],
"src/",
"db/",
"mod.ts",
"deps.ts",
"config.ts",
"config.example.ts"
],
"exclude": [], "exclude": [],
"useTabs": true, "useTabs": true,
"lineWidth": 200, "lineWidth": 200,
@ -44,4 +21,4 @@
"singleQuote": true, "singleQuote": true,
"proseWrap": "preserve" "proseWrap": "preserve"
} }
} }

View File

@ -47,4 +47,4 @@ export type {
export { Client } from 'https://deno.land/x/mysql@v2.11.0/mod.ts'; export { Client } from 'https://deno.land/x/mysql@v2.11.0/mod.ts';
export { initLog, log, LogTypes as LT } from 'https://raw.githubusercontent.com/Burn-E99/Log4Deno/V1.1.0/mod.ts'; export { initLog, log, LogTypes as LT } from 'https://raw.githubusercontent.com/Burn-E99/Log4Deno/V2.0.0/mod.ts';

View File

@ -15,6 +15,14 @@ export const Activities: Array<Activity> = [
{ {
name: 'Raids', name: 'Raids',
options: [ options: [
{
name: 'The Desert Perpetual (Epic)',
maxMembers: 6,
},
{
name: 'The Desert Perpetual',
maxMembers: 6,
},
{ {
name: "Salvation's Edge", name: "Salvation's Edge",
maxMembers: 6, maxMembers: 6,
@ -56,6 +64,18 @@ export const Activities: Array<Activity> = [
{ {
name: 'Dungeons', name: 'Dungeons',
options: [ options: [
{
name: 'Equilibrium',
maxMembers: 3,
},
{
name: 'Sundered Doctrine',
maxMembers: 3,
},
{
name: "Vesper's Host",
maxMembers: 3,
},
{ {
name: "Warlord's Ruin", name: "Warlord's Ruin",
maxMembers: 3, maxMembers: 3,

View File

@ -27,10 +27,12 @@ export const alternateEventBtnStr = 'Join as Alternate';
export const noDescProvided = 'No description provided.'; export const noDescProvided = 'No description provided.';
// Member List generators // Member List generators
const escapeMemberNameForDisplay = (memberName: string): string => memberName.replaceAll('\\', '').replaceAll('_', '\\_');
export const generateMemberTitle = (memberList: Array<LFGMember>, maxMembers: number): string => `Members Joined: ${memberList.length}/${maxMembers}`; export const generateMemberTitle = (memberList: Array<LFGMember>, maxMembers: number): string => `Members Joined: ${memberList.length}/${maxMembers}`;
export const generateMemberList = (memberList: Array<LFGMember>): string => memberList.length ? memberList.map((member) => `${member.name} - <@${member.id}>`).join('\n') : noMembersStr; export const generateMemberList = (memberList: Array<LFGMember>): string =>
memberList.length ? memberList.map((member) => `${escapeMemberNameForDisplay(member.name)} - <@${member.id}>`).join('\n') : noMembersStr;
export const generateAlternateList = (alternateList: Array<LFGMember>): string => export const generateAlternateList = (alternateList: Array<LFGMember>): string =>
alternateList.length ? alternateList.map((member) => `${member.name} - <@${member.id}>${member.joined ? ' *' : ''}`).join('\n') : noMembersStr; alternateList.length ? alternateList.map((member) => `${escapeMemberNameForDisplay(member.name)} - <@${member.id}>${member.joined ? ' *' : ''}`).join('\n') : noMembersStr;
// Fields for event creation and editing modals // Fields for event creation and editing modals
export const eventTimeId = 'eventTime'; export const eventTimeId = 'eventTime';