Files
DefinitelyTyped/knuddels-userapps-api/knuddels-userapps-api-tests.ts
2017-03-07 21:19:34 +01:00

138 lines
3.9 KiB
TypeScript

/// <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();