├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ └── issue-template.md ├── .gitignore ├── Firefox ├── @betterdiscord-0.0.1.xpi ├── README.md ├── betterdiscord-0.0.3-fx.xpi ├── data │ ├── css │ │ └── main.css │ └── js │ │ └── main.js ├── icon.png ├── lib │ ├── BdPageMod.js │ ├── BetterDiscord.js │ └── main.js ├── package.json └── test │ └── test-index.js ├── Gruntfile.js ├── ISSUE_TEMPLATE.md ├── Installers ├── Electron │ ├── .gitignore │ ├── package.json │ └── src │ │ ├── asar.js │ │ ├── data │ │ ├── css │ │ │ └── main.css │ │ ├── error.html │ │ ├── font │ │ │ ├── Inconsolata.woff2 │ │ │ └── OpenSans-Regular.ttf │ │ ├── index.html │ │ ├── js │ │ │ ├── jquery-2.0.0.min.js │ │ │ ├── jquery-2.2.2.min.js │ │ │ ├── main.js │ │ │ └── splash.js │ │ ├── splash.html │ │ └── vi.json │ │ ├── index.js │ │ ├── installer_index.js │ │ ├── package.json │ │ ├── updater.js │ │ └── utils.js ├── Node │ ├── config.json │ ├── index.js │ ├── install.bat │ └── install.sh ├── dotNet │ ├── .gitattributes │ ├── .gitignore │ ├── BetterDiscordWI.sln │ ├── BetterDiscordWI │ │ ├── App.config │ │ ├── App.manifest │ │ ├── BetterDiscord-icon.ico │ │ ├── BetterDiscordWI.csproj │ │ ├── FormMain.Designer.cs │ │ ├── FormMain.cs │ │ ├── FormMain.resx │ │ ├── Program.cs │ │ ├── Properties │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ ├── Resources │ │ │ ├── BetterDiscord-icon.ico │ │ │ ├── bd_logo2.png │ │ │ ├── bd_logo_64x64.png │ │ │ ├── bd_logo_64x64_nobg.png │ │ │ └── bd_logo_large_nobg.png │ │ ├── Utils.cs │ │ ├── components │ │ │ └── CTextBox.cs │ │ ├── packages.config │ │ └── panels │ │ │ ├── IPanel.cs │ │ │ ├── Panel0.Designer.cs │ │ │ ├── Panel0.cs │ │ │ ├── Panel0.resx │ │ │ ├── Panel1.Designer.cs │ │ │ ├── Panel1.cs │ │ │ ├── Panel1.resx │ │ │ ├── Panel2.Designer.cs │ │ │ ├── Panel2.cs │ │ │ ├── Panel2.resx │ │ │ ├── Panel3.Designer.cs │ │ │ └── Panel3.cs │ ├── README.md │ └── config.xml └── dotNet2 │ ├── BetterDiscordWI.sln │ └── BetterDiscordWI │ ├── App.config │ ├── BetterDiscordWI.csproj │ ├── FodyWeavers.xml │ ├── FormMain.Designer.cs │ ├── FormMain.cs │ ├── FormMain.resx │ ├── Program.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings │ ├── Resources │ ├── Betterdiscord small black+blue.png │ └── Betterdiscord small white+blue.png │ ├── Utils.cs │ ├── app.manifest │ ├── betterdiscord_small_white_blue_icO_icon.ico │ ├── controls │ ├── Button.Designer.cs │ └── Button.cs │ ├── packages.config │ └── panels │ ├── ConfigPanel.Designer.cs │ ├── ConfigPanel.cs │ ├── ConfigPanel.resx │ ├── IPanel.cs │ ├── InstallPanel.Designer.cs │ ├── InstallPanel.cs │ ├── InstallPanel.resx │ ├── LicensePanel.Designer.cs │ ├── LicensePanel.cs │ └── LicensePanel.resx ├── LICENSE ├── Plugins ├── AutoPlayGifs.plugin.js ├── CustomGame.plugin.js ├── GuildsScroller.plugin.js ├── clock.plugin.js ├── customRoleColour.plugin.js ├── dblClickEdit.plugin.js ├── emoteBlacklist.plugin.js ├── mediaSupport.plugin.js ├── properTimestamps.plugin.js ├── typingsound.plugin.js └── videoSupport.js ├── README.md ├── betterdiscord.js ├── css ├── main.css └── main.min.css ├── data ├── emotedata_bttv.json ├── emotedata_ffz.json ├── emotedata_twitch.json ├── emotedata_twitch_global.json ├── emotedata_twitch_subscriber.json ├── emotefilter.json ├── serverlist.json ├── serverlist_archive.json └── updater.json ├── dev ├── css │ ├── CodeMirror.css │ ├── main.css │ ├── main.css.map │ └── main.sass └── js │ ├── 00settings.js │ ├── 01core.js │ ├── 02emoteModule.js │ ├── 03publicServers.js │ ├── 04quickEmoteMenu.js │ ├── 05customCssEditor.js │ ├── 06settingsPanel.js │ ├── 07utils.js │ ├── 08voiceMode.js │ ├── 09pluginModule.js │ ├── 10themeModule.js │ ├── 11webSocket.js │ └── 12api.js ├── html ├── pstest.html └── test.html ├── issues ├── js ├── main.js └── main.min.js ├── lib ├── BetterDiscord.devp.js ├── BetterDiscord.js ├── Utils.js └── config.json ├── misc ├── uninstall.bat ├── uninstall.js └── validator.js ├── package.json ├── splice └── v2 ├── .babelrc ├── Gruntfile.js ├── README.MD ├── dist └── js │ └── main.js ├── lib ├── config.json ├── core.js ├── main.js ├── test.js └── utils.js ├── package.json └── src └── js ├── api.js ├── core.js ├── event.js ├── modules ├── modules.js └── observermodule.js ├── plugin.js └── utils.js /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh text=auto -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/issue-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue template 3 | about: Template for all future issues 4 | 5 | --- 6 | 7 | *Before* you create an issue, make sure you have: 8 | 9 | 1. Checked that that issue hasn't already been submitted. You can search open issues [here](https://github.com/Jiiks/BetterDiscordApp/issues). 10 | 2. Checked that there isn't an answer in either of the Discord servers (if you can access them - don't complain if you can't). 11 | 3. Checked that it isn't in the following list of frequently asked questions. 12 | 13 | If none of that helps you, delete the prefilled contents of this issue and ask whatever question you may have *in English so we can understand it*. 14 | 15 | ### FAQ 16 | 17 | > *BetterDiscord doesn't work.* 18 | > *BetterDiscord won't install.* 19 | > *BetterDiscord doesn't support macOS.* 20 | 21 | This branch isn't being updated anymore. Until BetterDiscord v2 is released you can use [Zach Rauen's fork](https://github.com/rauenzi/BetterDiscordApp). 22 | 23 | > *BetterDiscord doesn't support Linux.* 24 | 25 | There's an installer script for BetterDiscord on Linux available [here](https://github.com/bb010g/betterdiscordctl). 26 | 27 | > *BetterDiscord doesn't work in my browser.* 28 | 29 | The browser version doesn't exist anymore. Use the desktop client. 30 | 31 | > *BetterDiscord doesn't work on my phone.* 32 | 33 | ... and never will. BetterDiscord is a client modification for Discord's desktop Electron client. (Electron is a framework for making cross platform apps using web technologies. Basically the desktop client is just the web client in a specialised web browser.) 34 | 35 | > *Is there any security risks involved with installing BetterDiscord?* 36 | > *My friend was hacked after he/she installed BetterDiscord.* 37 | 38 | *Not by itself.* However, BetterDiscord allows loading plugins. Discord, BetterDiscord, and any plugins you install (even without enabling) have full access to your system as your local user account. (Including full access to your Discord account.) So, make sure you only download plugins from sources you trust. 39 | 40 | Also, please note that [BetterDocs](https://betterdocs.net) and other third-party sources by definition *are not* affiliated with BetterDiscord or it's developers. 41 | 42 | > *How do I install plugin [x]?* 43 | > *Is there a plugin to [x]?* 44 | > *Does [x] theme exist?* 45 | 46 | https://imgur.com/lczPQxW 47 | 48 | > *Minimal mode broke everything.* 49 | 50 | You can get back into Discord's settings to disable it by pressing `Control + ,` on Windows and Linux or `Command + ,` on macOS. 51 | 52 | > *How do I completely hide messages from people I've blocked?* 53 | 54 | Add this to your custom CSS: 55 | 56 | ```css 57 | .message-group-blocked { 58 | display: none !important; 59 | } 60 | ``` 61 | 62 | > *How do I remove BetterDiscord?* 63 | 64 | BetterDiscord is installed to the following locations: 65 | 66 | Platform | Discord path 67 | -------------|--------------- 68 | Windows | `%APPDATA%`\discord\0.0.`*`\modules\discord_desktop_core 69 | macOS | ~/Library/Application Support/discord/0.0.`*`/modules/discord_desktop_core 70 | Linux | ~/.config/discord/0.0.`*`/modules/discord_desktop_core 71 | 72 | To remove BetterDiscord, open the file `index.js` in that directory and make sure only this line exists: 73 | 74 | ```js 75 | module.exports = require('./core'); 76 | ``` 77 | 78 | Then, delete the `core` directory. 79 | 80 | BetterDiscord's data is stored in the following locations: 81 | 82 | Platform | BetterDiscord data path 83 | -------------|--------------- 84 | Windows | `%APPDATA%`\BetterDiscord 85 | macOS | ~/Library/Preferences/BetterDiscord 86 | Linux | ~/.config/BetterDiscord 87 | 88 | To remove all of BetterDiscord's data, just delete that directory. 89 | 90 | > *BetterDiscord v2?* 91 | 92 | [BetterDiscord v2 is the new version of BetterDiscord currently in development.](https://github.com/JsSucks/BetterDiscordApp) If you'd like to help out with BetterDiscord v2, join the JsSucks Discord server. (Invite code `KYKwv4R`.) The only requirement is JavaScript/ES6 knowledge. 93 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | *.name 3 | devjs/.idea/devjs.iml 4 | *.bak 5 | *.bak.* 6 | *.xpi 7 | Firefox/data/js/jquery-2.1.4.min.js 8 | *.dev.* 9 | /nbproject/private/ 10 | node_modules 11 | .sass-cache 12 | /*.jiiks 13 | Installers/dotNet/bin/ 14 | Installers/dotNet/packages/ 15 | Installers/dotNet/dlls/ 16 | v2/dist/vendor/ 17 | v2/lib/static.js 18 | **/*.suo 19 | Installers/**/*/bin 20 | Installers/**/*/obj 21 | Installers/**/*/packages 22 | -------------------------------------------------------------------------------- /Firefox/@betterdiscord-0.0.1.xpi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jiiks/BetterDiscordApp/470767179507df8fc5f359dd72f13e0c740c3068/Firefox/@betterdiscord-0.0.1.xpi -------------------------------------------------------------------------------- /Firefox/README.md: -------------------------------------------------------------------------------- 1 | #BetterDiscord 2 | BetterDiscord enhances Discord with several features -------------------------------------------------------------------------------- /Firefox/betterdiscord-0.0.3-fx.xpi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jiiks/BetterDiscordApp/470767179507df8fc5f359dd72f13e0c740c3068/Firefox/betterdiscord-0.0.3-fx.xpi -------------------------------------------------------------------------------- /Firefox/data/css/main.css: -------------------------------------------------------------------------------- 1 | .guilds { 2 | background:red !important; 3 | } -------------------------------------------------------------------------------- /Firefox/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jiiks/BetterDiscordApp/470767179507df8fc5f359dd72f13e0c740c3068/Firefox/icon.png -------------------------------------------------------------------------------- /Firefox/lib/BdPageMod.js: -------------------------------------------------------------------------------- 1 | "use sctrict" 2 | 3 | var pageMod = require('sdk/page-mod'); 4 | var data = require("sdk/self").data; 5 | 6 | function BdPageMod(options, callbacks) { 7 | pageMod.PageMod({ 8 | include: '*.discordapp.com', 9 | contentScriptFile: [data.url('../data/js/jquery-2.1.4.min.js'), data.url('../data/js/main.js')], 10 | contentStyleFile: [] 11 | }); 12 | } 13 | 14 | exports.BdPageMod = BdPageMod; -------------------------------------------------------------------------------- /Firefox/lib/BetterDiscord.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | 3 | var _bdPagemod = require('./BdPageMod.js'); 4 | 5 | function BetterDiscord(args) { 6 | _bdPagemod = new _bdPagemod.BdPageMod(); 7 | } 8 | 9 | exports.BetterDiscord = BetterDiscord; -------------------------------------------------------------------------------- /Firefox/lib/main.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var _betterDiscord = require("./BetterDiscord.js"); 4 | 5 | function main(options, callbacks) { 6 | _betterDiscord = new _betterDiscord.BetterDiscord(); 7 | } 8 | 9 | exports.main = main; -------------------------------------------------------------------------------- /Firefox/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "BetterDiscord", 3 | "name": "betterdiscord", 4 | "version": "0.0.3", 5 | "description": "BetterDiscord enhances Discord with several features", 6 | "main": "lib/main", 7 | "author": "JiCode", 8 | "engines": { 9 | "firefox": ">=40.*" 10 | }, 11 | "license": "MIT", 12 | "keywords": [ 13 | "jetpack" 14 | ], 15 | "installs_allowed_from": [ 16 | "https://betterdiscord.net" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /Firefox/test/test-index.js: -------------------------------------------------------------------------------- 1 | var main = require("../"); 2 | 3 | exports["test main"] = function(assert) { 4 | assert.pass("Unit test running!"); 5 | }; 6 | 7 | exports["test main async"] = function(assert, done) { 8 | assert.pass("async Unit test running!"); 9 | done(); 10 | }; 11 | 12 | exports["test dummy"] = function(assert, done) { 13 | main.dummy("foo", function(text) { 14 | assert.ok((text === "foo"), "Is the text actually 'foo'"); 15 | done(); 16 | }); 17 | }; 18 | 19 | require("sdk/test").run(exports); 20 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | sass: { 5 | dist: { 6 | options: { 7 | style: 'expanded' 8 | }, 9 | files: { 10 | 'dev/css/main.css': 'dev/css/main.sass' 11 | } 12 | } 13 | }, 14 | concat: { 15 | js: { 16 | src: 'dev/js/*.js', 17 | dest: 'js/main.js' 18 | }, 19 | css: { 20 | src: 'dev/css/*.css', 21 | dest: 'css/main.css' 22 | } 23 | }, 24 | uglify: { 25 | options: { 26 | screwIE8: true 27 | }, 28 | js: { 29 | files: { 30 | 'js/main.min.js': ['js/main.js'] 31 | } 32 | } 33 | }, 34 | cssmin: { 35 | css: { 36 | src: 'css/main.css', 37 | dest: 'css/main.min.css' 38 | } 39 | } 40 | }); 41 | grunt.loadNpmTasks('grunt-contrib-concat'); 42 | grunt.loadNpmTasks('grunt-contrib-uglify'); 43 | grunt.loadNpmTasks('grunt-contrib-sass'); 44 | grunt.loadNpmTasks('grunt-css'); 45 | grunt.registerTask('default', ['sass', 'concat', 'uglify', 'cssmin']); 46 | }; -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | *Before* you create an issue, make sure you have: 2 | 3 | 1. Checked that that issue hasn't already been submitted. You can search open issues [here](https://github.com/Jiiks/BetterDiscordApp/issues). 4 | 2. Checked that there isn't an answer in either of the Discord servers (if you can access them - don't complain if you can't). 5 | 3. Checked that it isn't in the following list of frequently asked questions. 6 | 7 | If none of that helps you, delete the prefilled contents of this issue and ask whatever question you may have *in English so we can understand it*. 8 | 9 | ### FAQ 10 | 11 | > *BetterDiscord doesn't work.* 12 | > *BetterDiscord won't install.* 13 | > *BetterDiscord doesn't support macOS.* 14 | 15 | This branch isn't being updated anymore. Until BetterDiscord v2 is released you can use [Zach Rauen's fork](https://github.com/rauenzi/BetterDiscordApp). 16 | 17 | > *BetterDiscord doesn't support Linux.* 18 | 19 | There's an installer script for BetterDiscord on Linux available [here](https://github.com/bb010g/betterdiscordctl). 20 | 21 | > *BetterDiscord doesn't work in my browser.* 22 | 23 | The browser version doesn't exist anymore. Use the desktop client. 24 | 25 | > *BetterDiscord doesn't work on my phone.* 26 | 27 | ... and never will. BetterDiscord is a client modification for Discord's desktop Electron client. (Electron is a framework for making cross platform apps using web technologies. Basically the desktop client is just the web client in a specialised web browser.) 28 | 29 | > *Is there any security risks involved with installing BetterDiscord?* 30 | > *My friend was hacked after he/she installed BetterDiscord.* 31 | 32 | *Not by itself.* However, BetterDiscord allows loading plugins. Discord, BetterDiscord, and any plugins you install (even without enabling) have full access to your system as your local user account. (Including full access to your Discord account.) So, make sure you only download plugins from sources you trust. 33 | 34 | Also, please note that [BetterDocs](https://betterdocs.net) and other third-party sources by definition *are not* affiliated with BetterDiscord or it's developers. 35 | 36 | > *How do I install plugin [x]?* 37 | > *Is there a plugin to [x]?* 38 | > *Does [x] theme exist?* 39 | 40 | https://imgur.com/lczPQxW 41 | 42 | > *Minimal mode broke everything.* 43 | 44 | You can get back into Discord's settings to disable it by pressing `Control + ,` on Windows and Linux or `Command + ,` on macOS. 45 | 46 | > *How do I completely hide messages from people I've blocked?* 47 | 48 | Add this to your custom CSS: 49 | 50 | ```css 51 | .message-group-blocked { 52 | display: none !important; 53 | } 54 | ``` 55 | 56 | > *How do I remove BetterDiscord?* 57 | 58 | BetterDiscord is installed to the following locations: 59 | 60 | Platform | Discord path 61 | -------------|--------------- 62 | Windows | `%APPDATA%`\discord\0.0.`*`\modules\discord_desktop_core 63 | macOS | ~/Library/Application Support/discord/0.0.`*`/modules/discord_desktop_core 64 | Linux | ~/.config/discord/0.0.`*`/modules/discord_desktop_core 65 | 66 | To remove BetterDiscord, open the file `index.js` in that directory and make sure only this line exists: 67 | 68 | ```js 69 | module.exports = require('./core'); 70 | ``` 71 | 72 | Then, delete the `core` directory. 73 | 74 | BetterDiscord's data is stored in the following locations: 75 | 76 | Platform | BetterDiscord data path 77 | -------------|--------------- 78 | Windows | `%APPDATA%`\BetterDiscord 79 | macOS | ~/Library/Preferences/BetterDiscord 80 | Linux | ~/.config/BetterDiscord 81 | 82 | To remove all of BetterDiscord's data, just delete that directory. 83 | 84 | > *BetterDiscord v2?* 85 | 86 | [BetterDiscord v2 is the new version of BetterDiscord currently in development.](https://github.com/JsSucks/BetterDiscordApp) If you'd like to help out with BetterDiscord v2, join the JsSucks Discord server. (Invite code `KYKwv4R`.) The only requirement is JavaScript/ES6 knowledge. 87 | -------------------------------------------------------------------------------- /Installers/Electron/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | pack.bat 3 | run.bat -------------------------------------------------------------------------------- /Installers/Electron/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "betterdiscordinstaller", 3 | "description": "Better Discord installer.", 4 | "version": "0.1.1", 5 | "homepage": "https://github.com/Jiiks/BetterDiscordApp", 6 | "license": "MIT", 7 | "main": "index.js", 8 | "dependencies": { 9 | "fs-extra": "^0.30.0", 10 | "readline": "^1.3.0", 11 | "open": "^0.0.5", 12 | "request": "^2.72.0", 13 | "path": "^0.12.7", 14 | "walk": "^2.3.9", 15 | "unzip": "^0.1.11" 16 | }, 17 | "devDependencies": { 18 | "electron-prebuilt": "~1.2.8" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Installers/Electron/src/asar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const 4 | fs = require('fs'), 5 | path = require('path'), 6 | walk = require('walk'), 7 | p = require('path'); 8 | 9 | fs.mkdirPSync = function(dirPath) { 10 | try { 11 | fs.mkdirSync(dirPath); 12 | } catch(err) { 13 | if(err.errno === -4058 || err.errno === -2) { 14 | fs.mkdirPSync(path.dirname(dirPath)); 15 | fs.mkdirPSync(dirPath); 16 | } else if(err.errno === -4075) { 17 | return "EXIST"; 18 | } else { 19 | return "NOT OK"; 20 | } 21 | } 22 | return "OK"; 23 | } 24 | 25 | class Asar { 26 | 27 | constructor(filePath) { 28 | this.path = filePath; 29 | this.files = []; 30 | } 31 | 32 | extract(statusCb, progressCb, cb) { 33 | this.walker = walk.walk(this.path, { followLinks: false }); 34 | statusCb("Creating Directories"); 35 | this.walker.on('file', (root, stat, next) => { 36 | this.files.push(`${root}/${stat.name}`); 37 | try { 38 | fs.statSync(root.replace("app.asar", "app")); 39 | } catch(err) { 40 | fs.mkdirPSync(root.replace("app.asar", "app")); 41 | } 42 | next(); 43 | }); 44 | 45 | this.walker.on('end', () => { 46 | var self = this; 47 | statusCb("Copying files"); 48 | var p = 1; 49 | var filecount = this.files.length; 50 | 51 | function copy(files, index) { 52 | if(index >= filecount) { 53 | statusCb("Finished extracting app package"); 54 | cb(null); 55 | return; 56 | } 57 | setTimeout(() => { self.copyfile(files, index, copy) }, 1); 58 | progressCb(index, filecount); 59 | } 60 | 61 | copy(this.files, 0); 62 | }); 63 | } 64 | 65 | copyfile(files, index, cb) { 66 | fs.writeFileSync(files[index].replace("app.asar", "app"), fs.readFileSync(files[index])); 67 | cb(files, index+1); 68 | } 69 | } 70 | 71 | module.exports = Asar; -------------------------------------------------------------------------------- /Installers/Electron/src/data/error.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |