MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | /* 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 | |
| 19 | void create() { |
| 20 | if( clonep() ) return; |
| 21 | seteuid(getuid()); |
| 22 | } |
| 23 | |
| 24 | object caller; |
| 25 | string msgbuf; |
| 26 | |
| 27 | mapping 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 | |
| 38 | int allowed() { |
| 39 | return IS_ARCH(this_player()) || getuid(this_player())=="gloinson"; |
| 40 | } |
| 41 | |
| 42 | string 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 | |
| 50 | void 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 | */ |
| 62 | void 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 |
| 82 | void 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 | |
| 92 | varargs 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 | |
| 104 | void NetDead() { |
| 105 | disable_commands(); |
| 106 | } |
| 107 | |
| 108 | string query_real_name() { |
| 109 | return "(Twitter)"; |
| 110 | } |
| 111 | |
| 112 | varargs 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 |
| 118 | void catch_tell( string msg ) { |
| 119 | if( allowed() && interactive(this_object()) ) { |
| 120 | write( msg ); |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | // hier landen daten von aussen |
| 125 | int 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 | |