blob: 99245b2b9d3afba79215067459ab1ce064a10951 [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 */
Zesstracc470b22020-01-08 20:33:12 +010010#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +020011
12#include <wizlevels.h>
13#include <daemon/channel.h>
14
15#define HOST "127.0.0.1"
16#define PORT 4911
17
18#define DEBUG(x) tell_object(find_player("rumata"),x+"\n")
19
20void create() {
MG Mud User88f12472016-06-24 23:31:02 +020021 seteuid(getuid());
Zesstraf126b342020-01-09 20:43:42 +010022 CHMASTER->join("twitter",this_object());
MG Mud User88f12472016-06-24 23:31:02 +020023}
24
25object caller;
26string msgbuf;
27
Zesstracc470b22020-01-08 20:33:12 +010028// Explizit erlaubte Personen/UIDs mit ihren Kuerzeln
MG Mud User88f12472016-06-24 23:31:02 +020029mapping registered = ([
30 "rumata": "ru",
31 "arathorn": "ara",
32 "ark": "ark",
33 "zesstra": "ze",
34 "zook": "zo",
35 "humni": "hu",
36 "miril": "mi",
Rumata20088402019-12-06 10:59:22 +010037 "gloinson": "gl",
Zesstracc470b22020-01-08 20:33:12 +010038 "amaryllis": "ama",
Zesstra754bb3b2020-01-08 21:27:33 +010039 "zaphob": "zap",
MG Mud User88f12472016-06-24 23:31:02 +020040]);
41
Zesstra3a62b412020-01-08 20:11:27 +010042// Erlaubt sind EM+ und ausgewaehlte weitere Personen
Zesstracc470b22020-01-08 20:33:12 +010043// geprueft wird anhand der UID des Interactives und weiterhin, dass alle
44// Objekte in der Aufrufkette mindestens ein gleich grosses Level haben wie
45// der Interactive.
MG Mud User88f12472016-06-24 23:31:02 +020046int allowed() {
Zesstra3a62b412020-01-08 20:11:27 +010047 return ARCH_SECURITY
Zesstra6af05952020-01-08 22:10:38 +010048 || ( this_interactive()
49 && member(registered, getuid(this_interactive()))
Zesstra439355e2020-01-08 21:17:16 +010050 && secure_level() >= (query_wiz_level(geteuid(this_interactive())))
Zesstracc470b22020-01-08 20:33:12 +010051 ) ;
52}
Zesstracc470b22020-01-08 20:33:12 +010053// Wer darf das Tool bekommen/nutzen?
54// Alle oben eingetragenen UIDs.
55public int tool_allowed(object pl)
56{
57 return IS_ARCH(pl) || member(registered, getuid(pl));
MG Mud User88f12472016-06-24 23:31:02 +020058}
59
60string sig( object pl ) {
61 string uid = getuid(pl);
62 if( !uid ) return "??";
63 string abbr = registered[uid];
64 if( !abbr ) return uid;
65 return abbr;
66}
67
68void emit( string msg ) {
69 CHMASTER->send("twitter",this_object(),msg,MSG_SAY);
70 /*
71 foreach( string uid: m_indices(registered) ) {
72 object pl = find_player(uid);
73 if( pl ) tell_object(pl,msg);
74 }*/
75}
76
77/* Offizielle API funktion
78 * xeval "/secure/misc/twitter"->twitter("@_zesstra_ welcome back")
79 */
80void twitter(string msg) {
81 int err = 0;
82 if( !allowed() ) {
Zesstra997a31d2020-01-08 20:17:40 +010083 write( "Twitter ist ARCH+Berechtigte only.\n" );
MG Mud User88f12472016-06-24 23:31:02 +020084 return;
85 }
Zesstra997a31d2020-01-08 20:17:40 +010086 msg = msg + "^" + sig(this_interactive()) + "\n";
Zesstra81610f12020-04-04 15:21:58 +020087 if (sizeof(msg) > 279)
88 write("Tweet ist zu lang.\n");
89 if(interactive(this_object())) {
MG Mud User88f12472016-06-24 23:31:02 +020090 tell_object(this_object(),msg);
91 } else {
92 msgbuf = msg;
Zesstra997a31d2020-01-08 20:17:40 +010093 caller = this_interactive();
MG Mud User88f12472016-06-24 23:31:02 +020094 if( (err=net_connect(HOST,PORT))!=0 ) {
95 write( "Konnte Tweet nicht senden. err="+err+"\n" );
96 }
97 }
98}
99
100// sonderfunktion fuer den fall, dass man die verbindung
101// aufbauen will, ohne dass etwas auf twitter erscheint
102void connect() {
103 int err = 0;
104 if( interactive(this_object()) ) return;
105 msgbuf = "";
Zesstra997a31d2020-01-08 20:17:40 +0100106 caller = this_interactive();
MG Mud User88f12472016-06-24 23:31:02 +0200107 if( (err=net_connect(HOST,PORT))!=0 ) {
108 write( "Konnte Tweet nicht connected. err="+err+"\n" );
109 }
110}
111
112varargs void logon(int flag) {
113 if( flag<0 ) {
114 tell_object(caller,"Twitterproxy antwortet nicht?\n");
115 } else {
116 enable_commands();
117 add_action("input","",1);
118 write(msgbuf);
119 if( msgbuf!="" ) emit( msgbuf );
120 //"/secure/master"->disconnect(this_object());
121 }
122}
123
124void NetDead() {
125 disable_commands();
126}
127
128string query_real_name() {
129 return "(Twitter)";
130}
131
132varargs string Name( int casus, int demon ) {
133 return "Twitter";
134}
135
136// daten werden via tell_object an dieses objekt gesendet
137// und dann nach aussen weitergeben
138void catch_tell( string msg ) {
139 if( allowed() && interactive(this_object()) ) {
140 write( msg );
141 }
142}
143
144// hier landen daten von aussen
145int input( string s ) {
146 string msg = query_verb();
147 if( s ) msg = msg + " " + s;
148 emit( msg ); //"Twitter teilt dir mit: "+msg+"\n" );
149 return 1;
150}
151