blob: 944277a50cb9de32c862579c38a5327b35f8b448 [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());
22}
23
24object caller;
25string msgbuf;
26
Zesstracc470b22020-01-08 20:33:12 +010027// Explizit erlaubte Personen/UIDs mit ihren Kuerzeln
MG Mud User88f12472016-06-24 23:31:02 +020028mapping registered = ([
29 "rumata": "ru",
30 "arathorn": "ara",
31 "ark": "ark",
32 "zesstra": "ze",
33 "zook": "zo",
34 "humni": "hu",
35 "miril": "mi",
Rumata20088402019-12-06 10:59:22 +010036 "gloinson": "gl",
Zesstracc470b22020-01-08 20:33:12 +010037 "amaryllis": "ama",
Zesstra439355e2020-01-08 21:17:16 +010038 "zaphob": "za",
MG Mud User88f12472016-06-24 23:31:02 +020039]);
40
Zesstra3a62b412020-01-08 20:11:27 +010041// Erlaubt sind EM+ und ausgewaehlte weitere Personen
Zesstracc470b22020-01-08 20:33:12 +010042// geprueft wird anhand der UID des Interactives und weiterhin, dass alle
43// Objekte in der Aufrufkette mindestens ein gleich grosses Level haben wie
44// der Interactive.
MG Mud User88f12472016-06-24 23:31:02 +020045int allowed() {
Zesstra3a62b412020-01-08 20:11:27 +010046 return ARCH_SECURITY
Zesstracc470b22020-01-08 20:33:12 +010047 || ( member(registered, getuid(this_interactive()))
Zesstra439355e2020-01-08 21:17:16 +010048 && secure_level() >= (query_wiz_level(geteuid(this_interactive())))
Zesstracc470b22020-01-08 20:33:12 +010049 ) ;
50}
51
52// Wer darf das Tool bekommen/nutzen?
53// Alle oben eingetragenen UIDs.
54public int tool_allowed(object pl)
55{
56 return IS_ARCH(pl) || member(registered, getuid(pl));
MG Mud User88f12472016-06-24 23:31:02 +020057}
58
59string sig( object pl ) {
60 string uid = getuid(pl);
61 if( !uid ) return "??";
62 string abbr = registered[uid];
63 if( !abbr ) return uid;
64 return abbr;
65}
66
67void emit( string msg ) {
68 CHMASTER->send("twitter",this_object(),msg,MSG_SAY);
69 /*
70 foreach( string uid: m_indices(registered) ) {
71 object pl = find_player(uid);
72 if( pl ) tell_object(pl,msg);
73 }*/
74}
75
76/* Offizielle API funktion
77 * xeval "/secure/misc/twitter"->twitter("@_zesstra_ welcome back")
78 */
79void twitter(string msg) {
80 int err = 0;
81 if( !allowed() ) {
Zesstra997a31d2020-01-08 20:17:40 +010082 write( "Twitter ist ARCH+Berechtigte only.\n" );
MG Mud User88f12472016-06-24 23:31:02 +020083 return;
84 }
Zesstra997a31d2020-01-08 20:17:40 +010085 msg = msg + "^" + sig(this_interactive()) + "\n";
MG Mud User88f12472016-06-24 23:31:02 +020086 if(interactive(this_object())) {
87 tell_object(this_object(),msg);
88 } else {
89 msgbuf = msg;
Zesstra997a31d2020-01-08 20:17:40 +010090 caller = this_interactive();
MG Mud User88f12472016-06-24 23:31:02 +020091 if( (err=net_connect(HOST,PORT))!=0 ) {
92 write( "Konnte Tweet nicht senden. err="+err+"\n" );
93 }
94 }
95}
96
97// sonderfunktion fuer den fall, dass man die verbindung
98// aufbauen will, ohne dass etwas auf twitter erscheint
99void connect() {
100 int err = 0;
101 if( interactive(this_object()) ) return;
102 msgbuf = "";
Zesstra997a31d2020-01-08 20:17:40 +0100103 caller = this_interactive();
MG Mud User88f12472016-06-24 23:31:02 +0200104 if( (err=net_connect(HOST,PORT))!=0 ) {
105 write( "Konnte Tweet nicht connected. err="+err+"\n" );
106 }
107}
108
109varargs void logon(int flag) {
110 if( flag<0 ) {
111 tell_object(caller,"Twitterproxy antwortet nicht?\n");
112 } else {
113 enable_commands();
114 add_action("input","",1);
115 write(msgbuf);
116 if( msgbuf!="" ) emit( msgbuf );
117 //"/secure/master"->disconnect(this_object());
118 }
119}
120
121void NetDead() {
122 disable_commands();
123}
124
125string query_real_name() {
126 return "(Twitter)";
127}
128
129varargs string Name( int casus, int demon ) {
130 return "Twitter";
131}
132
133// daten werden via tell_object an dieses objekt gesendet
134// und dann nach aussen weitergeben
135void catch_tell( string msg ) {
136 if( allowed() && interactive(this_object()) ) {
137 write( msg );
138 }
139}
140
141// hier landen daten von aussen
142int input( string s ) {
143 string msg = query_verb();
144 if( s ) msg = msg + " " + s;
145 emit( msg ); //"Twitter teilt dir mit: "+msg+"\n" );
146 return 1;
147}
148