Browse Source

Changed how the settings are saved

Markus-Rost 7 years ago
parent
commit
718e8b48d6
1 changed files with 95 additions and 178 deletions
  1. 95 178
      main.js

+ 95 - 178
main.js

@@ -20,11 +20,11 @@ var settings = defaultSettings;
 
 
 function getSettings(callback) {
 function getSettings(callback) {
 	request( {
 	request( {
-		uri: process.env.site + process.env.page + '?action=raw&ctype=javascript',
+		uri: process.env.read + process.env.file + process.env.access,
 		json: true
 		json: true
 	}, function( error, response, body ) {
 	}, function( error, response, body ) {
-		if ( error || !response || !body ) {
-			console.log( 'Fehler beim Erhalten der Einstellungen' + ( error ? ': ' + error.message : '.' ) );
+		if ( error || !response || !body || body.error ) {
+			console.log( 'Fehler beim Erhalten der Einstellungen' + ( error ? ': ' + error.message : ( body ? ( body.error ? ': ' + body.error : '.' ) : '.' ) ) );
 		}
 		}
 		else {
 		else {
 			console.log( 'Einstellungen erfolgreich ausgelesen.' );
 			console.log( 'Einstellungen erfolgreich ausgelesen.' );
@@ -42,7 +42,7 @@ function setStatus() {
 client.on('ready', () => {
 client.on('ready', () => {
 	getSettings(setStatus);
 	getSettings(setStatus);
 	console.log( 'Erfolgreich als ' + client.user.username + ' angemeldet!' );
 	console.log( 'Erfolgreich als ' + client.user.username + ' angemeldet!' );
-	client.user.setActivity( process.env.prefix + 'help' );
+	client.user.setActivity( process.env.prefix + ' help' );
 } );
 } );
 
 
 
 
@@ -82,8 +82,8 @@ var pausecmdmap = {
 
 
 function cmd_settings(lang, msg, args, line) {
 function cmd_settings(lang, msg, args, line) {
 	if ( admin(msg) ) {
 	if ( admin(msg) ) {
-		if ( msg.guild.id in settings ) var text = lang.settings.current + '\n`' + process.env.prefix + 'settings lang` – ' + settings[msg.guild.id].lang + '\n`' + process.env.prefix + 'settings wiki` – ' + settings[msg.guild.id].wiki;
-		else var text = lang.settings.missing.replace( '%1$s', '`' + process.env.prefix + 'settings lang`' ).replace( '%2$s', '`' + process.env.prefix + 'settings wiki`' );
+		if ( msg.guild.id in settings ) var text = lang.settings.current + '\n`' + process.env.prefix + ' settings lang` – ' + settings[msg.guild.id].lang + '\n`' + process.env.prefix + ' settings wiki` – ' + settings[msg.guild.id].wiki;
+		else var text = lang.settings.missing.replace( '%1$s', '`' + process.env.prefix + ' settings lang`' ).replace( '%2$s', '`' + process.env.prefix + ' settings wiki`' );
 		if ( args.length ) {
 		if ( args.length ) {
 			if ( args[0] ) args[0] = args[0].toLowerCase();
 			if ( args[0] ) args[0] = args[0].toLowerCase();
 			if ( args[1] ) args[1] = args[1].toLowerCase();
 			if ( args[1] ) args[1] = args[1].toLowerCase();
@@ -126,94 +126,52 @@ function edit_settings(lang, msg, key, value) {
 	var hourglass;
 	var hourglass;
 	msg.react('⏳').then( function( reaction ) {
 	msg.react('⏳').then( function( reaction ) {
 		hourglass = reaction;
 		hourglass = reaction;
-		var url = process.env.site + 'api.php';
-		request.get( {
-			uri: url + '?action=query&format=json&meta=tokens&type=login',
-			json: true
-		}, function( error, response, body ) {
-			if ( error || !response || !body || body.error || !body.query ) {
-				console.log( 'Fehler beim Erhalten des Anmeldetoken' + ( error ? ': ' + error.message : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
-				msg.reply( lang.settings.save_failed );
-			}
-			else {
-				request.post( {
-					uri: url,
-					form: {
-						action: 'login',
-						format: 'json',
-						lgname: process.env.username,
-						lgpassword: process.env.password,
-						lgtoken: body.query.tokens.logintoken
-					},
-					json: true
-				}, function( lerror, lresponse, lbody ) {
-					if ( lerror || !lresponse || !lbody || lbody.error || !body.query ) {
-						console.log( 'Fehler beim Anmelden' + ( lerror ? ': ' + lerror.message : ( lbody ? ( lbody.error ? ': ' + lbody.error.info : '.' ) : '.' ) ) );
-						msg.reply( lang.settings.save_failed );
-					}
-					else {
-						request.post( {
-							uri: url,
-							form: {
-								action: 'query',
-								format: 'json',
-								meta: 'tokens',
-								type: 'csrf'
-							},
-							json: true
-						}, function( perror, presponse, pbody ) {
-							if ( perror || !presponse || !pbody || pbody.error || !body.query ) {
-								console.log( 'Fehler beim Erhalten des Bearbeitungstoken' + ( perror ? ': ' + perror.message : ( pbody ? ( pbody.error ? ': ' + pbody.error.info : '.' ) : '.' ) ) );
-								msg.reply( lang.settings.save_failed );
-							}
-							else if ( settings == defaultSettings ) {
-								console.log( 'Fehler beim Erhalten bestehender Einstellungen.' );
-								msg.reply( lang.settings.save_failed );
-							}
-							else {
-								var temp_settings = Object.assign({}, settings);
-								if ( !( msg.guild.id in temp_settings ) ) temp_settings[msg.guild.id] = Object.assign({}, defaultSettings['default']);
-								temp_settings[msg.guild.id][key] = value;
-								Object.keys(temp_settings).forEach( function(guild) {
-									if ( !client.guilds.has(guild) && guild != 'default' ) delete temp_settings[guild];
-								} );
-								request.post( {
-									uri: url,
-									form: {
-										action: 'edit',
-										format: 'json',
-										title: process.env.page,
-										text: JSON.stringify( temp_settings, null, '\t' ),
-										summary: 'Einstellungen aktualisiert.',
-										bot: true,
-										token: pbody.query.tokens.csrftoken
-									},
-									json: true
-								}, function( eerror, eresponse, ebody ) {
-									if ( eerror || !eresponse || !ebody || ebody.error || !body.query ) {
-										console.log( 'Fehler beim Bearbeiten' + ( eerror ? ': ' + eerror.message : ( ebody ? ( ebody.error ? ': ' + ebody.error.info : '.' ) : '.' ) ) );
-										msg.reply( lang.settings.save_failed );
-									}
-									else {
-										settings = Object.assign({}, temp_settings);
-										if ( key == 'lang' ) lang = i18n[value];
-										cmd_settings(lang, msg, [key], '');
-										console.log( 'Einstellungen erfolgreich aktualisiert.' );
-									}
-								} );
-							}
-						} );
-					}
-				} );
-			}
-			
+		if ( settings == defaultSettings ) {
+			console.log( 'Fehler beim Erhalten bestehender Einstellungen.' );
+			msg.reply( lang.settings.save_failed );
 			if ( hourglass != undefined ) hourglass.remove();
 			if ( hourglass != undefined ) hourglass.remove();
-		} );
+		}
+		else {
+			var temp_settings = Object.assign({}, settings);
+			if ( !( msg.guild.id in temp_settings ) ) temp_settings[msg.guild.id] = Object.assign({}, defaultSettings['default']);
+			temp_settings[msg.guild.id][key] = value;
+			Object.keys(temp_settings).forEach( function(guild) {
+				if ( !client.guilds.has(guild) && guild != 'default' ) delete temp_settings[guild];
+			} );
+			request.post( {
+				uri: process.env.save + process.env.access,
+				body: {
+					branch: 'master',
+					commit_message: 'Einstellungen aktualisiert.',
+					actions: [
+						{
+							action: 'update',
+							file_path: process.env.file,
+							content: JSON.stringify( temp_settings, null, '\t' )
+						}
+					]
+				},
+				json: true
+			}, function( error, response, body ) {
+				if ( error || !response || response.statusCode != 201 || !body || body.error ) {
+					console.log( 'Fehler beim Bearbeiten' + ( error ? ': ' + error.message : ( body ? ( body.message ? ': ' + body.message : ( body.error ? ': ' + body.error : '.' ) ) : '.' ) ) );
+					msg.reply( lang.settings.save_failed );
+				}
+				else {
+					settings = Object.assign({}, temp_settings);
+					if ( key == 'lang' ) lang = i18n[value];
+					cmd_settings(lang, msg, [key], '');
+					console.log( 'Einstellungen erfolgreich aktualisiert.' );
+				}
+				
+				if ( hourglass != undefined ) hourglass.remove();
+			} );
+		}
 	} );
 	} );
 }
 }
 
 
 function cmd_info(lang, msg, args, line) {
 function cmd_info(lang, msg, args, line) {
-	if ( args.length ) cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+	if ( args.length ) cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	else {
 	else {
 		var owner = '*MarkusRost*';
 		var owner = '*MarkusRost*';
 		if ( msg.channel.type == 'text' && msg.guild.members.has(process.env.owner) ) owner = '<@' + process.env.owner + '>';
 		if ( msg.channel.type == 'text' && msg.guild.members.has(process.env.owner) ) owner = '<@' + process.env.owner + '>';
@@ -248,7 +206,7 @@ function cmd_help(lang, msg, args, line) {
 				var cmdlist = lang.help.admin + '\n';
 				var cmdlist = lang.help.admin + '\n';
 				for ( var i = 0; i < cmds.length; i++ ) {
 				for ( var i = 0; i < cmds.length; i++ ) {
 					if ( cmds[i].admin && !cmds[i].hide ) {
 					if ( cmds[i].admin && !cmds[i].hide ) {
-						cmdlist += '🔹 `' + process.env.prefix + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
+						cmdlist += '🔹 `' + process.env.prefix + ' ' + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
 					}
 					}
 				}
 				}
 				
 				
@@ -259,7 +217,7 @@ function cmd_help(lang, msg, args, line) {
 			var cmdlist = ''
 			var cmdlist = ''
 			for ( var i = 0; i < cmds.length; i++ ) {
 			for ( var i = 0; i < cmds.length; i++ ) {
 				if ( cmds[i].cmd.split(' ')[0] === args[0].toLowerCase() && !cmds[i].unsearchable && ( msg.channel.type != 'text' || !cmds[i].admin || admin(msg) ) ) {
 				if ( cmds[i].cmd.split(' ')[0] === args[0].toLowerCase() && !cmds[i].unsearchable && ( msg.channel.type != 'text' || !cmds[i].admin || admin(msg) ) ) {
-					cmdlist += '🔹 `' + process.env.prefix + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
+					cmdlist += '🔹 `' + process.env.prefix + ' ' + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
 				}
 				}
 			}
 			}
 			
 			
@@ -271,7 +229,7 @@ function cmd_help(lang, msg, args, line) {
 		var cmdlist = lang.help.all + '\n';
 		var cmdlist = lang.help.all + '\n';
 		for ( var i = 0; i < cmds.length; i++ ) {
 		for ( var i = 0; i < cmds.length; i++ ) {
 			if ( !cmds[i].hide && !cmds[i].admin ) {
 			if ( !cmds[i].hide && !cmds[i].admin ) {
-				cmdlist += '🔹 `' + process.env.prefix + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
+				cmdlist += '🔹 `' + process.env.prefix + ' ' + cmds[i].cmd + '`\n\t' + cmds[i].desc + '\n';
 			}
 			}
 		}
 		}
 		
 		
@@ -321,7 +279,7 @@ function cmd_test(lang, msg, args, line) {
 
 
 function cmd_invite(lang, msg, args, line) {
 function cmd_invite(lang, msg, args, line) {
 	if ( args.length ) {
 	if ( args.length ) {
-		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	} else {
 	} else {
 		client.generateInvite(268954689).then( invite => msg.channel.send( lang.invite.bot + '\n<' + invite + '>' ) );
 		client.generateInvite(268954689).then( invite => msg.channel.send( lang.invite.bot + '\n<' + invite + '>' ) );
 	}
 	}
@@ -347,7 +305,7 @@ function cmd_stop(lang, msg, args, line) {
 		console.log( 'Ich schalte mich nun aus!' );
 		console.log( 'Ich schalte mich nun aus!' );
 		client.destroy();
 		client.destroy();
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
-		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	}
 	}
 }
 }
 
 
@@ -363,7 +321,7 @@ function cmd_pause(lang, msg, args, line) {
 			pause[msg.guild.id] = true;
 			pause[msg.guild.id] = true;
 		}
 		}
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
-		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	}
 	}
 }
 }
 
 
@@ -396,7 +354,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
 	if ( invoke == 'page' || invoke == lang.search.page ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + args.join('_') );
 	if ( invoke == 'page' || invoke == lang.search.page ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + args.join('_') );
 	else if ( invoke == 'search' || invoke == lang.search.search ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/Special:Search/' + args.join('_') );
 	else if ( invoke == 'search' || invoke == lang.search.search ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/Special:Search/' + args.join('_') );
 	else if ( invoke == 'diff' ) cmd_diff(lang, msg, args, wiki);
 	else if ( invoke == 'diff' ) cmd_diff(lang, msg, args, wiki);
-	else if ( title == '' || title.indexOf( '#' ) != -1 || title.indexOf( '?' ) != -1 ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ) );
+	else if ( title.indexOf( '#' ) != -1 || title.indexOf( '?' ) != -1 ) msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + title.replace( / /g, '_' ) );
 	else if ( invoke == 'user' || invoke == lang.search.user.unknown || invoke == lang.search.user.male || invoke == lang.search.user.female ) cmd_user(lang, msg, args.join('_'), wiki, title.replace( / /g, '_' ));
 	else if ( invoke == 'user' || invoke == lang.search.user.unknown || invoke == lang.search.user.male || invoke == lang.search.user.female ) cmd_user(lang, msg, args.join('_'), wiki, title.replace( / /g, '_' ));
 	else if ( invoke.startsWith('user:') ) cmd_user(lang, msg, title.substr(5), wiki, title.replace( / /g, '_' ));
 	else if ( invoke.startsWith('user:') ) cmd_user(lang, msg, title.substr(5), wiki, title.replace( / /g, '_' ));
 	else if ( invoke.startsWith('userprofile:') ) cmd_user(lang, msg, title.substr(12), wiki, title.replace( / /g, '_' ));
 	else if ( invoke.startsWith('userprofile:') ) cmd_user(lang, msg, title.substr(12), wiki, title.replace( / /g, '_' ));
@@ -408,7 +366,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
 		msg.react('⏳').then( function( reaction ) {
 		msg.react('⏳').then( function( reaction ) {
 			hourglass = reaction;
 			hourglass = reaction;
 			request( {
 			request( {
-				uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&format=json&meta=siteinfo&siprop=interwikimap&redirects=true&titles=' + encodeURI( title ),
+				uri: 'https://' + wiki + '.gamepedia.com/api.php?action=query&format=json&meta=siteinfo&siprop=general|interwikimap&redirects=true&titles=' + encodeURI( title ),
 				json: true
 				json: true
 			}, function( error, response, body ) {
 			}, function( error, response, body ) {
 				if ( error || !response || !body || !body.query ) {
 				if ( error || !response || !body || !body.query ) {
@@ -454,7 +412,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
 								if ( regex.test(entry[i].url) ) {
 								if ( regex.test(entry[i].url) ) {
 									var iwtitle = entry[i].url.replace( '$1', intertitle ).replace( regex.exec(entry[i].url)[0], '' );
 									var iwtitle = entry[i].url.replace( '$1', intertitle ).replace( regex.exec(entry[i].url)[0], '' );
 									var link = regex.exec(entry[i].url)[1];
 									var link = regex.exec(entry[i].url)[1];
-									cmd_link(lang, msg, iwtitle, link, '!' + link + ' ');
+									cmd_link(lang, msg, iwtitle, link, ' !' + link + ' ');
 								}
 								}
 								else msg.channel.send( entry[i].url.replace( '$1', intertitle.replace( / /g, '_' ) ) );
 								else msg.channel.send( entry[i].url.replace( '$1', intertitle.replace( / /g, '_' ) ) );
 								break;
 								break;
@@ -462,7 +420,7 @@ function cmd_link(lang, msg, title, wiki, cmd) {
 						}
 						}
 					}
 					}
 					else {
 					else {
-						msg.react('🤷');
+						msg.channel.send( 'https://' + wiki + '.gamepedia.com/' + body.query.general.mainpage.replace( / /g, '_' ) );
 					}
 					}
 				}
 				}
 				
 				
@@ -509,7 +467,7 @@ function cmd_serverlist(lang, msg, args, line) {
 		} );
 		} );
 		msg.author.send( serverlist, {split:{char:'\n\n'}} );
 		msg.author.send( serverlist, {split:{char:'\n\n'}} );
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
-		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	}
 	}
 }
 }
 
 
@@ -777,7 +735,7 @@ function cmd_voice(lang, msg, args, line) {
 	if ( admin(msg) ) {
 	if ( admin(msg) ) {
 		msg.reply( lang.voice.text + '\n`' + lang.voice.channel + ' – <' + lang.voice.name + '>`' );
 		msg.reply( lang.voice.text + '\n`' + lang.voice.channel + ' – <' + lang.voice.name + '>`' );
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
 	} else if ( msg.channel.type != 'text' || !pause[msg.guild.id] ) {
-		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+		cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 	}
 	}
 }
 }
 
 
@@ -821,7 +779,7 @@ client.on('message', msg => {
 		if ( channel.type == 'text' && msg.guild.id in settings ) setting = Object.assign({}, settings[msg.guild.id]);
 		if ( channel.type == 'text' && msg.guild.id in settings ) setting = Object.assign({}, settings[msg.guild.id]);
 		var lang = i18n[setting.lang];
 		var lang = i18n[setting.lang];
 		lang.link = setting.wiki;
 		lang.link = setting.wiki;
-		var invoke = cont.split(' ')[1].toLowerCase();
+		var invoke = cont.split(' ')[1] ? cont.split(' ')[1].toLowerCase() : '';
 		var aliasInvoke = ( invoke in lang.aliase ) ? lang.aliase[invoke] : invoke;
 		var aliasInvoke = ( invoke in lang.aliase ) ? lang.aliase[invoke] : invoke;
 		if ( cont.toLowerCase().startsWith(process.env.prefix) && aliasInvoke in multilinecmdmap ) {
 		if ( cont.toLowerCase().startsWith(process.env.prefix) && aliasInvoke in multilinecmdmap ) {
 			if ( channel.type != 'text' || channel.permissionsFor(client.user).has('MANAGE_MESSAGES') ) {
 			if ( channel.type != 'text' || channel.permissionsFor(client.user).has('MANAGE_MESSAGES') ) {
@@ -834,14 +792,14 @@ client.on('message', msg => {
 		} else {
 		} else {
 			cont.split('\n').forEach( function(line) {
 			cont.split('\n').forEach( function(line) {
 				if ( line.toLowerCase().startsWith(process.env.prefix) ) {
 				if ( line.toLowerCase().startsWith(process.env.prefix) ) {
-					invoke = line.split(' ')[1].toLowerCase();
+					invoke = line.split(' ')[1] ? line.split(' ')[1].toLowerCase() : '';
 					var args = line.split(' ').slice(2);
 					var args = line.split(' ').slice(2);
 					aliasInvoke = ( invoke in lang.aliase ) ? lang.aliase[invoke] : invoke;
 					aliasInvoke = ( invoke in lang.aliase ) ? lang.aliase[invoke] : invoke;
 					console.log((msg.guild ? msg.guild.name : '@' + author.username) + ': ' + invoke + ' - ' + args);
 					console.log((msg.guild ? msg.guild.name : '@' + author.username) + ': ' + invoke + ' - ' + args);
 					if ( channel.type != 'text' || !pause[msg.guild.id] ) {
 					if ( channel.type != 'text' || !pause[msg.guild.id] ) {
 						if ( aliasInvoke in cmdmap ) cmdmap[aliasInvoke](lang, msg, args, line);
 						if ( aliasInvoke in cmdmap ) cmdmap[aliasInvoke](lang, msg, args, line);
-						else if ( invoke.startsWith('!') ) cmd_link(lang, msg, args.join(' '), invoke.substr(1), invoke + ' ');
-						else cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, '');
+						else if ( invoke.startsWith('!') ) cmd_link(lang, msg, args.join(' '), invoke.substr(1), ' ' + invoke + ' ');
+						else cmd_link(lang, msg, line.split(' ').slice(1).join(' '), lang.link, ' ');
 					} else if ( channel.type == 'text' && pause[msg.guild.id] && author.id == process.env.owner && aliasInvoke in pausecmdmap ) {
 					} else if ( channel.type == 'text' && pause[msg.guild.id] && author.id == process.env.owner && aliasInvoke in pausecmdmap ) {
 						pausecmdmap[aliasInvoke](lang, msg, args, line);
 						pausecmdmap[aliasInvoke](lang, msg, args, line);
 					}
 					}
@@ -886,79 +844,38 @@ client.on('guildDelete', guild => {
 	client.fetchUser(process.env.owner).then( owner => owner.send( 'Ich wurde von einem Server entfernt:\n\n' + '"' + guild.toString() + '" von ' + guild.owner.toString() + ' mit ' + guild.memberCount + ' Mitgliedern\n' + guild.channels.find('type', 'text').toString() + ' (' + guild.id + ')' ) );
 	client.fetchUser(process.env.owner).then( owner => owner.send( 'Ich wurde von einem Server entfernt:\n\n' + '"' + guild.toString() + '" von ' + guild.owner.toString() + ' mit ' + guild.memberCount + ' Mitgliedern\n' + guild.channels.find('type', 'text').toString() + ' (' + guild.id + ')' ) );
 	console.log( 'Ich wurde von einem Server entfernt.' );
 	console.log( 'Ich wurde von einem Server entfernt.' );
 	
 	
-	var url = process.env.site + 'api.php';
-	request.get( {
-		uri: url + '?action=query&format=json&meta=tokens&type=login',
-		json: true
-	}, function( error, response, body ) {
-		if ( error || !response || !body || body.error || !body.query ) {
-			console.log( 'Fehler beim Erhalten des Anmeldetoken' + ( error ? ': ' + error.message : ( body ? ( body.error ? ': ' + body.error.info : '.' ) : '.' ) ) );
-		}
-		else {
-			request.post( {
-				uri: url,
-				form: {
-					action: 'login',
-					format: 'json',
-					lgname: process.env.username,
-					lgpassword: process.env.password,
-					lgtoken: body.query.tokens.logintoken
-				},
-				json: true
-			}, function( lerror, lresponse, lbody ) {
-				if ( lerror || !lresponse || !lbody || lbody.error || !body.query ) {
-					console.log( 'Fehler beim Anmelden' + ( lerror ? ': ' + lerror.message : ( lbody ? ( lbody.error ? ': ' + lbody.error.info : '.' ) : '.' ) ) );
-				}
-				else {
-					request.post( {
-						uri: url,
-						form: {
-							action: 'query',
-							format: 'json',
-							meta: 'tokens',
-							type: 'csrf'
-						},
-						json: true
-					}, function( perror, presponse, pbody ) {
-						if ( perror || !presponse || !pbody || pbody.error || !body.query ) {
-							console.log( 'Fehler beim Erhalten des Bearbeitungstoken' + ( perror ? ': ' + perror.message : ( pbody ? ( pbody.error ? ': ' + pbody.error.info : '.' ) : '.' ) ) );
-						}
-						else if ( settings == defaultSettings ) {
-							console.log( 'Fehler beim Erhalten bestehender Einstellungen.' );
-						}
-						else {
-							var temp_settings = Object.assign({}, settings);
-							Object.keys(temp_settings).forEach( function(guild) {
-								if ( !client.guilds.has(guild) && guild != 'default' ) delete temp_settings[guild];
-							} );
-							request.post( {
-								uri: url,
-								form: {
-									action: 'edit',
-									format: 'json',
-									title: process.env.page,
-									text: JSON.stringify( temp_settings, null, '\t' ),
-									summary: 'Einstellungen aktualisiert.',
-									bot: true,
-									token: pbody.query.tokens.csrftoken
-								},
-								json: true
-							}, function( eerror, eresponse, ebody ) {
-								if ( eerror || !eresponse || !ebody || ebody.error || !body.query ) {
-									console.log( 'Fehler beim Bearbeiten' + ( eerror ? ': ' + eerror.message : ( ebody ? ( ebody.error ? ': ' + ebody.error.info : '.' ) : '.' ) ) );
-									msg.reply( lang.settings.save_failed );
-								}
-								else {
-									settings = Object.assign({}, temp_settings);
-									console.log( 'Einstellungen erfolgreich aktualisiert.' );
-								}
-							} );
-						}
-					} );
-				}
-			} );
-		}
-	} );
+	if ( settings == defaultSettings ) {
+		console.log( 'Fehler beim Erhalten bestehender Einstellungen.' );
+	}
+	else {
+		var temp_settings = Object.assign({}, settings);
+		Object.keys(temp_settings).forEach( function(guild) {
+			if ( !client.guilds.has(guild) && guild != 'default' ) delete temp_settings[guild];
+		} );
+		request.post( {
+			uri: process.env.save + process.env.access,
+			body: {
+				branch: 'master',
+				commit_message: 'Einstellungen aktualisiert.',
+				actions: [
+					{
+						action: 'update',
+						file_path: process.env.file,
+						content: JSON.stringify( temp_settings, null, '\t' )
+					}
+				]
+			},
+			json: true
+		}, function( error, response, body ) {
+			if ( error || !response || response.statusCode != 201 || !body || body.error ) {
+				console.log( 'Fehler beim Bearbeiten' + ( error ? ': ' + error.message : ( body ? ( body.message ? ': ' + body.message : ( body.error ? ': ' + body.error : '.' ) ) : '.' ) ) );
+			}
+			else {
+				settings = Object.assign({}, temp_settings);
+				console.log( 'Einstellungen erfolgreich aktualisiert.' );
+			}
+		} );
+	}
 });
 });