blob: f34519e1bfe13f9c869d906613f63ba8d62cf1e9 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/* rumatas twitter client, sendet text
2 * an einen twitterproxyprozess, der sie dann an twitter
3 * weiterschickt.
4 *
5 * version 2
6 * mit persistenter verbindung zum proxy und input-channel
7 *
8 * 25.5.2016 rumata@mg.mud.de
9 */
10
11#include <wizlevels.h>
12#include <daemon/channel.h>
13
14#define HOST "127.0.0.1"
15#define PORT 4911
16
17#define DEBUG(x) tell_object(find_player("rumata"),x+"\n")
18
19void create() {
20 if( clonep() ) return;
21 seteuid(getuid());
22}
23
24object caller;
25string msgbuf;
26
27mapping registered = ([
28 "rumata": "ru",
29 "arathorn": "ara",
30 "ark": "ark",
31 "zesstra": "ze",
32 "zook": "zo",
33 "humni": "hu",
34 "miril": "mi",
35 "gloinson": "gl"
36]);
37
38int allowed() {
39 return IS_ARCH(this_player()) || getuid(this_player())=="gloinson";
40}
41
42string sig( object pl ) {
43 string uid = getuid(pl);
44 if( !uid ) return "??";
45 string abbr = registered[uid];
46 if( !abbr ) return uid;
47 return abbr;
48}
49
50void emit( string msg ) {
51 CHMASTER->send("twitter",this_object(),msg,MSG_SAY);
52 /*
53 foreach( string uid: m_indices(registered) ) {
54 object pl = find_player(uid);
55 if( pl ) tell_object(pl,msg);
56 }*/
57}
58
59/* Offizielle API funktion
60 * xeval "/secure/misc/twitter"->twitter("@_zesstra_ welcome back")
61 */
62void twitter(string msg) {
63 int err = 0;
64 if( !allowed() ) {
65 write( "Twitter ist ARCH+Gloinson only.\n" );
66 return;
67 }
68 msg = msg + "^" + sig(this_player()) + "\n";
69 if(interactive(this_object())) {
70 tell_object(this_object(),msg);
71 } else {
72 msgbuf = msg;
73 caller = this_player();
74 if( (err=net_connect(HOST,PORT))!=0 ) {
75 write( "Konnte Tweet nicht senden. err="+err+"\n" );
76 }
77 }
78}
79
80// sonderfunktion fuer den fall, dass man die verbindung
81// aufbauen will, ohne dass etwas auf twitter erscheint
82void connect() {
83 int err = 0;
84 if( interactive(this_object()) ) return;
85 msgbuf = "";
86 caller = this_player();
87 if( (err=net_connect(HOST,PORT))!=0 ) {
88 write( "Konnte Tweet nicht connected. err="+err+"\n" );
89 }
90}
91
92varargs void logon(int flag) {
93 if( flag<0 ) {
94 tell_object(caller,"Twitterproxy antwortet nicht?\n");
95 } else {
96 enable_commands();
97 add_action("input","",1);
98 write(msgbuf);
99 if( msgbuf!="" ) emit( msgbuf );
100 //"/secure/master"->disconnect(this_object());
101 }
102}
103
104void NetDead() {
105 disable_commands();
106}
107
108string query_real_name() {
109 return "(Twitter)";
110}
111
112varargs string Name( int casus, int demon ) {
113 return "Twitter";
114}
115
116// daten werden via tell_object an dieses objekt gesendet
117// und dann nach aussen weitergeben
118void catch_tell( string msg ) {
119 if( allowed() && interactive(this_object()) ) {
120 write( msg );
121 }
122}
123
124// hier landen daten von aussen
125int input( string s ) {
126 string msg = query_verb();
127 if( s ) msg = msg + " " + s;
128 emit( msg ); //"Twitter teilt dir mit: "+msg+"\n" );
129 return 1;
130}
131