2013-04-28 11 views
6

Stavo creando un bot per connettersi a un irc per kick e ridge e lo stavo facendo rispondere a cose diverse, ma mi piacerebbe che rispondesse con il comando CTCP ACTION, questo è comunemente noto a un utente come/me utilizzato per giochi di ruolo o visualizzazione di azioni.Comando di comando CTCP raw ACTION con C#

secondo questa splendida pagina web su ctcp http://www.irchelp.org/irchelp/rfc/ctcpspec.html?

il formato è \ 001ACTION barfs sul pavimento. \ 001

Così ho creato il mio bot per rispondere con

writer.WriteLine("PRIVMSG " + CHANNEL + " \001ACTION " + message + "\001"); 

stampo questo risultato nella mia console pure, tutto ciò che risponde con "Nessun testo da inviare"

che non sapendo veramente cosa dovrebbe dirmi, presumo che il carattere di escape stia rompendo la linea in anticipo con il \ 0 ignorando totalmente l'altro 01 dopo di esso, quindi io avere il bo t stampare nella console ciò che legge e io digito/io balla e leggo nella console

CANALE PRIVMSG: (simbolo dispari) Messaggio di AZIONE (simbolo dispari) non so quali sono i simboli dispari ma a me sembrano faccine sorridenti ..... dopo aver parlato con alcune persone, ho capito che il formato è corretto ma il \ 001 può essere diverso per le diverse lingue

così cerco cosa può significare \ 001 per C# e i fin \ x01 e \ 0011 e il \ 0011 non fa nulla e anche il \ x01 mi restituisce la stessa risposta .... "Nessun testo da inviare"

I stampa "PRIVMSG" + CANALE + "\ x01ACTION "+ message +" \ x01 " alla mia console, e io il \ x01 viene sostituito con lo stesso carattere di faccina che mostra quando digito/io balla e faccio stampare al mio bot ciò che legge sulla console ...

mio codice per esso è semplicemente

if (type == MessageType.ActionMessage) 
      { 
       writer.WriteLine("PRIVMSG " + CHANNEL + " \x01ACTION " + message + "\x01"); 
       Console.WriteLine("PRIVMSG " + CHANNEL + " \x01ACTION " + message + "\x01"); 
       writer.Flush(); 
      } 

l'oggetto scrittore non è nullo, e la scrittura al mio console è così posso vedere cosa succede

la domanda finale è, questo è corretto e se non è il modo corretto per mostrare un'azione tramite il client C# al protocollo client CTCP

risposta

11

ho finalmente capito \ x01 è il carattere di escape corretto per \ 001, ma \ x01 è esadecimale e i caratteri di escape sono 2 byte mooolto ..... \ x01AC è un carattere di escape valido .... quindi O dovevo renderlo \ 0001 o avere il carattere di escape nella propria stringa "\ x01" + "ACTION action struff \ x01" in questo modo il compilatore, o maneggiarlo, non confonde A e C come parte del carattere di escape

in caratteri di escape C sono 1 byte quindi \ 001 o \ x01 non farebbero sì che A e C ne facciano parte ....

1

Ecco la sintassi del comando PRIVMSG:

PRIVMSG target :Here is your message

Probabilmente dimenticato solo il : che è il delimitatore per l'inizio del messaggio, il che spiegherebbe l'errore No text to send.

+0

ho postato i risultati per la risposta, grazie per aver risposto –