blob: 1f94201283566f3260bb209af40587a3f23e1318 [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",
Rumata20088402019-12-06 10:59:22 +010035 "gloinson": "gl",
36 "amaryllis": "ama"
MG Mud User88f12472016-06-24 23:31:02 +020037]);
38
Zesstra3a62b412020-01-08 20:11:27 +010039// Erlaubt sind EM+ und ausgewaehlte weitere Personen
MG Mud User88f12472016-06-24 23:31:02 +020040int allowed() {
Zesstra3a62b412020-01-08 20:11:27 +010041 return ARCH_SECURITY
42 || getuid(this_interactive())=="gloinson";
MG Mud User88f12472016-06-24 23:31:02 +020043}
44
45string sig( object pl ) {
46 string uid = getuid(pl);
47 if( !uid ) return "??";
48 string abbr = registered[uid];
49 if( !abbr ) return uid;
50 return abbr;
51}
52
53void emit( string msg ) {
54 CHMASTER->send("twitter",this_object(),msg,MSG_SAY);
55 /*
56 foreach( string uid: m_indices(registered) ) {
57 object pl = find_player(uid);
58 if( pl ) tell_object(pl,msg);
59 }*/
60}
61
62/* Offizielle API funktion
63 * xeval "/secure/misc/twitter"->twitter("@_zesstra_ welcome back")
64 */
65void twitter(string msg) {
66 int err = 0;
67 if( !allowed() ) {
68 write( "Twitter ist ARCH+Gloinson only.\n" );
69 return;
70 }
71 msg = msg + "^" + sig(this_player()) + "\n";
72 if(interactive(this_object())) {
73 tell_object(this_object(),msg);
74 } else {
75 msgbuf = msg;
76 caller = this_player();
77 if( (err=net_connect(HOST,PORT))!=0 ) {
78 write( "Konnte Tweet nicht senden. err="+err+"\n" );
79 }
80 }
81}
82
83// sonderfunktion fuer den fall, dass man die verbindung
84// aufbauen will, ohne dass etwas auf twitter erscheint
85void connect() {
86 int err = 0;
87 if( interactive(this_object()) ) return;
88 msgbuf = "";
89 caller = this_player();
90 if( (err=net_connect(HOST,PORT))!=0 ) {
91 write( "Konnte Tweet nicht connected. err="+err+"\n" );
92 }
93}
94
95varargs void logon(int flag) {
96 if( flag<0 ) {
97 tell_object(caller,"Twitterproxy antwortet nicht?\n");
98 } else {
99 enable_commands();
100 add_action("input","",1);
101 write(msgbuf);
102 if( msgbuf!="" ) emit( msgbuf );
103 //"/secure/master"->disconnect(this_object());
104 }
105}
106
107void NetDead() {
108 disable_commands();
109}
110
111string query_real_name() {
112 return "(Twitter)";
113}
114
115varargs string Name( int casus, int demon ) {
116 return "Twitter";
117}
118
119// daten werden via tell_object an dieses objekt gesendet
120// und dann nach aussen weitergeben
121void catch_tell( string msg ) {
122 if( allowed() && interactive(this_object()) ) {
123 write( msg );
124 }
125}
126
127// hier landen daten von aussen
128int input( string s ) {
129 string msg = query_verb();
130 if( s ) msg = msg + " " + s;
131 emit( msg ); //"Twitter teilt dir mit: "+msg+"\n" );
132 return 1;
133}
134