Einbinden von sendPostMessage

Posted by: Benz

Einbinden von sendPostMessage - 05.02.2016, 02:58:18

Ich habe mal eine Frage, jaaa ich weiß, davon habe ich häufiger welche :-D

Mein Problem sieht derzeit so aus :

App-Logs (privat): StarBots: ERROR: org.mozilla.javascript.EvaluatorException: Can't find method com.knuddels.apps.user.BotUser.sendPostMessage(org.mozilla.javascript.ConsString). (knuddelsDEV.3056XXXX.StarBots@v0: main.js#98)
at knuddelsDEV.3056XXXX.StarBots@v0: main.js:98

Natürlich habe ich folgendes versucht : ;-)

Code:
rank.addLabelChangeListener(function(toplistLabelChangeEvent) {
var user = toplistLabelChangeEvent.getUser();
var newLabel = toplistLabelChangeEvent.getNewLabel();
var bot = KnuddelsServer.getDefaultBotUser();
var message = toplistLabelChangeEvent.getNewLabel();
bot.sendPublicMessage('Funktionierender Ausgabetext !');

var message = 'Fehlerhafter Ausgabetext';
bot.sendPostMessage(message);



Mein Problem bezieht sich auf folgende Zeile, die ich versuche einzubinden : :-O

Code:
var message = 'Fehlerhafter Ausgabetext';
bot.sendPostMessage(message);



Wo liegt da das Problem ? Kann mir irgendwer sagen wo ich da einen Fehler habe ? :-|
Ich hab das Spiel auf jedem Fall online, die Fehlermeldung bekomme ich nur privat und im Log gesendet, jedoch wird die Message nicht ausgegeben per /m, wie ich es geplant hatte.
Jedoch läuft das Spiel welches ich habe damit einwandfrei, so das ich es erst einmal weiterlaufen lassen kann.


Lieben Dank im vorraus, für die hoffentlich glücklich stellende Antwort :-]
Posted by: Kev777

Re: Einbinden von sendPostMessage - 05.02.2016, 03:56:25

http://developer.knuddels.de/docs/classes/BotUser.html#method_sendPostMessage

sendPostMessage (receivingUser, topic, text)

Es fehlt also "receivingUser" und "topic" würde ich mal sagen.
Posted by: Benz

Re: Einbinden von sendPostMessage - 05.02.2016, 12:13:14

Also angenommen so oder wie ?

Code:
var message = 'Fehlerhafter Ausgabetext','Ausgabetopic';
sendPostMessage(receivingUser, topic, text);


oder wie ? :-O

Ich versuche das gerade irgendwie zu verstehen, weil irgendwo muss ja auch stehen, was er senden soll... :-|
Oder macht der das automatisch ?

Sorry, aber in dieser Ecke scheine ich wohl ein wenig dämlich zu sein, hab sendPostMessage noch nie verwendet :-D
Posted by: UltimateG4ming

Re: Einbinden von sendPostMessage - 05.02.2016, 13:25:54

Im Grunde ist es total simpel aufgebaut. Der erste Parameter in der sendPostMessage ist der User, der die Nachricht erhalten soll.
Als nächstes kommt der Betreff der /m. Zu guter Letzt kommt der vollständige Text der Nachricht.

Der Aufruf wäre dann also folgender:
Code:
var bot = KnuddelsServer.getDefaultBotUser();
bot.sendPostMessage(receivingUser, 'Betreff der Nachricht', 'Das ist der Text, der in der Nachricht dargestellt wird');
Posted by: Benz

Re: Einbinden von sendPostMessage - 05.02.2016, 14:44:38

Antwort auf: Dreamboy-1996 <3
Im Grunde ist es total simpel aufgebaut. Der erste Parameter in der sendPostMessage ist der User, der die Nachricht erhalten soll.
Als nächstes kommt der Betreff der /m. Zu guter Letzt kommt der vollständige Text der Nachricht.

Der Aufruf wäre dann also folgender:
Code:
var bot = KnuddelsServer.getDefaultBotUser();
bot.sendPostMessage(receivingUser, 'Betreff der Nachricht', 'Das ist der Text, der in der Nachricht dargestellt wird');



Ich hab das nun eingebunden, man beachte, das ist die Textausgabe der Topliste, die öffentlich und als /m ausgegeben werden soll ....

Öffentlich funktioniert es ....

Beispiel :

Code:



var access = KnuddelsServer.getToplistAccess();
var profile = KnuddelsServer.getAppProfileEntryAccess();

// Definiere deine Spielränge

var rank = access.createOrUpdateToplist('points2', 'Game StarWars-Sith', {

           
			0: 'Ungeeignet',
            1: 'Rang A',
 
            100000: 'Rang Z',
});

profile.createOrUpdateEntry(rank, ToplistDisplayType.LabelAndRank);

rank.addLabelChangeListener(function(toplistLabelChangeEvent) {
var user = toplistLabelChangeEvent.getUser();
var newLabel = toplistLabelChangeEvent.getNewLabel();
var bot = KnuddelsServer.getDefaultBotUser();
bot.sendPublicMessage('Gratulation °>_h' + user + '|/m ' + user + '|/w ' + user + '<°, °BB°Du hast soeben den °G°Rang _' + newLabel + '_ °BB°erreicht.');

bot.sendPostMessage(receivingUser, 'Rangaufstieg', 'gewünschter Text');




Ich hatte bereits die Zeile
Code:
var bot = KnuddelsServer.getDefaultBotUser();


enthalten, ich benötigte nur noch die öffentliche Ausgabe :
Code:
bot.sendPostMessage(receivingUser, 'Rangaufstieg', 'gewünschter Text');


Jedoch baut sich ein neues Problem auf, er erkennt die receivingUser nicht ! :-|

Das hier wäre die Fehlermeldung :

Code:
App-Logs (privat): StarBots: ERROR: org.mozilla.javascript.EcmaError: ReferenceError: "receivingUser" is not defined. (knuddelsDEV.3056XXXX.StarBots@v0: main.js#97)
	at knuddelsDEV.3056XXXX.StarBots@v0: main.js:97


Was mach ich verkehrt ? :-O
Posted by: Vampiric Desire

Re: Einbinden von sendPostMessage - 05.02.2016, 14:55:29

einfach user.sendPostMessage(betreff, text)
ist der shortcut für
bot.sendPostMessage(user, betreff, text)
Posted by: Tjeri

Re: Einbinden von sendPostMessage - 05.02.2016, 21:53:51

Antwort auf: TMboy

Jedoch baut sich ein neues Problem auf, er erkennt die receivingUser nicht ! :-|

Was mach ich verkehrt ? :-O


var user = ...

Du nennst deine Variable "user" und nicht "receivingUser". Das kann nicht funktionieren ;)
Posted by: Benz

Re: Einbinden von sendPostMessage - 06.02.2016, 17:57:12

Achte auf meine letzte Zeile , das funzelt auf jedem Fall ;-)
Hab es bei mir auch so eingebunden, funktioniert Wunderbar :-]

Code:
var access = KnuddelsServer.getToplistAccess();
var profile = KnuddelsServer.getAppProfileEntryAccess();

// Definiere deine Spielränge

var rank = access.createOrUpdateToplist('points2', 'Game StarWars-Sith', {

           
			0: 'Ungeeignet',
            1: 'Rang A',
 
            100000: 'Rang Z',
});

profile.createOrUpdateEntry(rank, ToplistDisplayType.LabelAndRank);

rank.addLabelChangeListener(function(toplistLabelChangeEvent) {
var user = toplistLabelChangeEvent.getUser();
var newLabel = toplistLabelChangeEvent.getNewLabel();
var bot = KnuddelsServer.getDefaultBotUser();
bot.sendPublicMessage('Gratulation °>_h' + user + '|/m ' + user + '|/w ' + user + '<°, °BB°Du hast soeben den °G°Rang _' + newLabel + '_ °BB°erreicht.');

user.sendPostMessage('Rangaufstieg', 'gewünschter Text');


Danke an Vampiric Desire, er hat eine supi Antwort auf Lager gehabt ;*

Manchmal reicht es auch einfach user zu machen und var user.... stehen zu lassen :-D
Posted by: UltimateG4ming

Re: Einbinden von sendPostMessage - 06.02.2016, 21:03:52

Es bringt auch nicht viel, wenn Du Code-Vorschläge stumpf kopierst. Du musst Dir den geposteten Code ansehen und dann versuchen, ihn zu verstehen. Dass aus meinem Teil das receivingUser nicht funktioniert hat, ist logisch, da du keine Variable hast, die diesen Namen trägt.
Posted by: Kev777

Re: Einbinden von sendPostMessage - 06.02.2016, 21:19:24

Antwort auf: TMboy
Also angenommen so oder wie ?

Code:
var message = 'Fehlerhafter Ausgabetext','Ausgabetopic';
sendPostMessage(receivingUser, topic, text);


oder wie ? :-O

Ich versuche das gerade irgendwie zu verstehen, weil irgendwo muss ja auch stehen, was er senden soll... :-|
Oder macht der das automatisch ?

Sorry, aber in dieser Ecke scheine ich wohl ein wenig dämlich zu sein, hab sendPostMessage noch nie verwendet :-D


Ich habe die Methode "sendPostMessage" der Klasse "BotUser" für sich allein gepostet und ebenso die originalen variablen aus dem Beispiel in der API Doku absichtlich so stehen lassen.
Ein klick auf den von mir geposteten Link hätte dich direkt in die API Doku gebracht und dir erklärt wie die Methode genau zu verwenden ist und dir auch gleich noch erklärt welcher Paramter der methode für was gut ist.

Wie schon geschrieben wurde bringt es dir nichts nur stumpf code zu kopieren ohne dir dessen funktion bewußt zu sein.


(Ergänzend noch zu dem post von Dreamboy-1996 <3)