initial commit of knuddels-userapps-api

This commit is contained in:
Knuddels-TobyB
2017-03-07 20:23:17 +01:00
parent ac8fb9a68d
commit b063e3b75f
4 changed files with 2959 additions and 0 deletions

2683
knuddels-userapps-api/index.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,122 @@
/// <reference types="knuddels-userapps-api" />
class Server implements App {
private usersPlaying: {[nick: string]: number} = {};
private isShuttingDown: boolean = false;
private htmlFile: HTMLFile = new HTMLFile('start.html');
private appContent: AppContent = AppContent.overlayContent(this.htmlFile, 243, 266);
onAppStart() {
KnuddelsServer.getChannel().getOnlineUsers(UserType.Human).forEach((user) => {
this.onUserJoined(user)
});
};
onUserJoined(user: User) {
const botNick = KnuddelsServer.getDefaultBotUser().getNick().escapeKCode();
user.sendPrivateMessage('Lust auf ne Runde Ziegenphobie? Mit nur _°BB>_h1 Knuddel|/appknuddel ' + botNick + '<°°°_ bist du dabei!');
};
onUserLeft(user: User) {
if (this.usersPlaying[user.getNick()] == 1) {
KnuddelsServer.getDefaultBotUser().transferKnuddel(user, new KnuddelAmount(1), 'Du hast den Channel verlassen.');
delete this.usersPlaying[user.getNick()];
}
};
onPrepareShutdown() {
if (!this.isShuttingDown) {
this.isShuttingDown = true;
for (let key in this.usersPlaying) {
const userId = KnuddelsServer.getUserAccess().getUserId(key);
const user = KnuddelsServer.getUserAccess().getUserById(userId);
KnuddelsServer.getDefaultBotUser().transferKnuddel(user, new KnuddelAmount(1), 'Die App fährt gleich herunter.');
user.getAppContentSessions().forEach((session: AppContentSession) => {
session.remove();
});
delete this.usersPlaying[key];
}
}
}
onBeforeKnuddelReceived(knuddelTransfer: KnuddelTransfer) {
const sender = knuddelTransfer.getSender();
if (!sender.canSendAppContent(this.appContent)) {
knuddelTransfer.reject('Sorry, mit diesem Gerät kannst du gerade nicht spielen.');
}
else if (sender.isChannelOwner() && knuddelTransfer.getKnuddelAmount().asNumber() != 1) {
knuddelTransfer.accept();
}
else if (this.isShuttingDown) {
knuddelTransfer.reject('Du App nimmt gerade keine neuen Spieler an.');
}
else if (this.usersPlaying[sender.getNick()]) {
knuddelTransfer.reject('Du spielst bereits.');
}
else if (knuddelTransfer.getKnuddelAmount().asNumber() != 1) {
const botNick = KnuddelsServer.getDefaultBotUser().getNick().escapeKCode();
knuddelTransfer.reject('Du musst genau _°BB>_h1 Knuddel senden|/appknuddel ' + botNick + '<°°°_...');
}
else {
knuddelTransfer.accept();
}
};
onKnuddelReceived(user: User, receiver: User, knuddelAmount: KnuddelAmount) {
if (knuddelAmount.asNumber() == 1) {
this.usersPlaying[user.getNick()] = 1;
user.sendAppContent(this.appContent);
}
else {
user.sendPrivateMessage('Vielen Dank für die Einzahlung.');
}
};
onEventReceived(user: User, key: string, data: string) {
if (key == 'selectedEntry' && this.usersPlaying[user.getNick()] == 1) {
this.usersPlaying[user.getNick()] = 2;
setTimeout(() => {
let doorNumber = parseInt(data[data.length - 1], 10);
let winningDoorNumber = RandomOperations.nextInt(0, 2) + 1;
let hasWon = winningDoorNumber == doorNumber;
let text = hasWon ? 'Richtig getippt' : 'Knapp daneben';
user.getAppContentSession(AppViewMode.Overlay).getAppContent().sendEvent('openDoor', {
'door': doorNumber,
'winningDoor': winningDoorNumber,
'text': text,
});
if (hasWon) {
KnuddelsServer.getDefaultBotUser().transferKnuddel(user, new KnuddelAmount(2), 'Richtig getippt...');
}
setTimeout(() => {
const botNick = KnuddelsServer.getDefaultBotUser().getNick().escapeKCode();
user.sendPrivateMessage('Na, Lust auf _°BB>_hnoch eine Runde|/appknuddel ' + botNick + '<°°°_?');
user.getAppContentSessions().forEach((session: AppContentSession) => {
session.remove();
});
delete this.usersPlaying[user.getNick()];
}, 4000);
}, 1500);
}
};
}
declare let App: Server;// tell the compiler that "App" will be available
App = new Server();

View File

@@ -0,0 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"knuddels-userapps-api-tests.ts"
]
}

View File

@@ -0,0 +1,137 @@
{
"extends": ["tslint-react"],
"rules": {
"align": [
true,
"statements"
],
"array-type": [
true,
"array"
],
"ban": false,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"eofline": true,
"forin": true,
"indent": [
true,
"tabs"
],
"interface-name": [
false,
"always-prefix"
],
"jsdoc-format": true,
"jsx-alignment": true,
"jsx-ban-props": true,
"jsx-curly-spacing": "never",
"jsx-no-multiline-js": true,
"jsx-no-string-ref": true,
"jsx-self-close": true,
"jsx-wrap-multiline": true,
"label-position": true,
"max-line-length": [true, 100],
"member-access": false,
"member-ordering": [
true,
"static-before-instance",
"variables-before-functions"
],
"no-any": false,
"no-arg": true,
"no-bitwise": false,
"no-conditional-assignment": false,
"no-consecutive-blank-lines": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-variable": true,
"no-empty": false,
"no-eval": true,
"no-inferrable-types": true,
"no-internal-module": true,
"no-null-keyword": false,
"no-require-imports": false,
"no-shadowed-variable": false,
"no-string-literal": true,
"no-switch-case-fall-through": false,
"no-trailing-whitespace": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"no-var-requires": false,
"object-literal-key-quotes": [true, "consistent"],
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"ordered-imports": false,
"quotemark": [
true,
"single",
"jsx-double",
"avoid-escape"
],
"radix": true,
"semicolon": [true, "always"],
"switch-default": true,
"trailing-comma": false,
"triple-equals": [
true,
"allow-null-check"
],
"typedef": [
true,
"call-signature",
"arrow-call-signature",
"property-declaration"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
},
{
"call-signature": "onespace",
"index-signature": "onespace",
"parameter": "onespace",
"property-declaration": "onespace",
"variable-declaration": "onespace"
}
],
"variable-name": [
true,
"check-format",
"allow-pascal-case",
"ban-keywords"
],
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}