void Self_OnChat(object sender, ChatEventArgs e)
        {
            InstantMessageDialog Dialog = InstantMessageDialog.MessageFromAgent;

            switch (e.SourceType)
            {
            case ChatSourceType.System:
                break;

            case ChatSourceType.Agent:
                break;

            case ChatSourceType.Object:
                Dialog = InstantMessageDialog.MessageFromObject;
                break;
            }
            UUID regionID = UUID.Zero;

            if (e.Simulator != null)
            {
                regionID = e.Simulator.RegionID;
            }
            Self_OnMessage(e.FromName, e.SourceID, e.OwnerID,
                           e.Message, UUID.Zero, false,
                           regionID, e.Position,
                           Dialog, e.Type, e);
            ;
        }
Exemplo n.º 2
0
        public void Self_OnInstantMessage(InstantMessage im, Simulator simulator)
        {
            LLUUID fromAgentID   = im.FromAgentID;
            string fromAgentName = im.FromAgentName;
            //LLUUID toAgentID = im.ToAgentID;
            LLUUID               regionID    = im.RegionID;
            LLVector3            position    = im.Position;
            InstantMessageDialog dialog      = im.Dialog;
            bool                 groupIM     = im.GroupIM;
            LLUUID               imSessionID = im.IMSessionID;
            DateTime             timestamp   = im.Timestamp;
            string               message     = im.Message;
            InstantMessageOnline offline     = im.Offline;

            byte[]    binaryBucket   = im.BinaryBucket;
            uint      parentEstateID = im.ParentEstateID;
            Hashtable item           = new Hashtable();

            item.Add("MessageType", "InstantMessage");
            item.Add("FromAgentID", fromAgentID);
            item.Add("FromAgentName", fromAgentName);
            item.Add("ParentEstateID", parentEstateID.ToString());
            item.Add("RegionID", regionID);
            item.Add("Position", position);
            item.Add("Dialog", dialog);
            item.Add("GroupIM", groupIM);
            item.Add("IMSessionID", imSessionID);
            item.Add("Timestamp", timestamp);
            item.Add("Message", message);
            item.Add("Offline", offline);
            item.Add("BinaryBucket", binaryBucket);
            enqueue(item);
        }
Exemplo n.º 3
0
        public frmInvOffered(METAboltInstance instance, InstantMessage e, UUID objectID, AssetType type)
        {
            InitializeComponent();

            SetExceptionReporter();
            Application.ThreadException += new ThreadExceptionHandler().ApplicationThreadException;

            this.instance = instance;
            client        = this.instance.Client;
            msg           = e;
            this.objectID = objectID;
            this.Text    += " [" + client.Self.Name + "]";

            invtype = type;

            if (invtype == AssetType.Folder)
            {
                instance.State.FolderRcvd = true;
            }
            else
            {
                instance.State.FolderRcvd = false;
            }

            diag = e.Dialog;

            //if (e.Dialog == InstantMessageDialog.TaskInventoryOffered)
            //{
            //    diainv = true;
            //}

            string a = "a";

            if (type.ToString().ToLower(CultureInfo.CurrentCulture).StartsWith("a", StringComparison.CurrentCultureIgnoreCase) || type.ToString().ToLower(CultureInfo.CurrentCulture).StartsWith("o", StringComparison.CurrentCultureIgnoreCase) || type.ToString().ToLower(CultureInfo.CurrentCulture).StartsWith("u", StringComparison.CurrentCultureIgnoreCase))
            {
                a = "an";
            }

            lblSubheading.Text = "You have received " + a + " " + type.ToString() + " named '" + e.Message + "' from " + e.FromAgentName;

            if (instance.Config.CurrentConfig.PlayInventoryItemReceived)
            {
                SoundPlayer simpleSound = new SoundPlayer(Properties.Resources.Item_received);
                simpleSound.Play();
                simpleSound.Dispose();
            }

            timer1.Interval = instance.DialogTimeOut;
            timer1.Enabled  = true;
            timer1.Start();

            DateTime dte = DateTime.Now.AddMinutes(15.0d);

            label1.Text = "This item will be auto accepted @ " + dte.ToShortTimeString();

            this.Text += "   " + "[ " + client.Self.Name + " ]";
        }
Exemplo n.º 4
0
        private void SendReply(InstantMessageDialog dialog, byte[] bucket)
        {
            client.Self.InstantMessage(client.Self.Name, msg.FromAgentID, string.Empty, msg.IMSessionID, dialog, InstantMessageOnline.Offline, client.Self.SimPosition, client.Network.CurrentSim.RegionID, bucket);

            if (dialog == InstantMessageDialog.InventoryAccepted)
            {
                client.Inventory.RequestFetchInventory(objectID, client.Self.AgentID);
            }
        }
Exemplo n.º 5
0
        public bool SendInstantMessage(UUID messageID, UUID toAgentID, string fromName, Vector3 fromPosition,
                                       UUID fromRegionID, bool fromGroup, InstantMessageDialog type, string message, bool allowOffline,
                                       DateTime timestamp, byte[] binaryBucket)
        {
            // Cap the message length at 1023 + null terminator
            if (!String.IsNullOrEmpty(message) && message.Length > 1023)
            {
                message = message.Substring(0, 1023);
            }

            // FIXME: Support IMing to remote agents
            IScenePresence presence;

            if (m_scene.TryGetPresence(toAgentID, out presence) && presence is LLAgent)
            {
                LLAgent agent = (LLAgent)presence;

                ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket();
                im.AgentData.AgentID           = agent.ID;
                im.MessageBlock.Dialog         = (byte)type;
                im.MessageBlock.FromAgentName  = Utils.StringToBytes(fromName);
                im.MessageBlock.FromGroup      = fromGroup;
                im.MessageBlock.ID             = messageID;
                im.MessageBlock.Message        = Utils.StringToBytes(message);
                im.MessageBlock.Offline        = (byte)((allowOffline) ? 1 : 0);
                im.MessageBlock.ParentEstateID = 0;
                im.MessageBlock.Position       = fromPosition;
                im.MessageBlock.RegionID       = fromRegionID;
                im.MessageBlock.Timestamp      = Utils.DateTimeToUnixTime(timestamp);
                im.MessageBlock.ToAgentID      = agent.ID;
                im.MessageBlock.BinaryBucket   = binaryBucket ?? Utils.EmptyBytes;

                m_udp.SendPacket(agent, im, ThrottleCategory.Task, false);
                return(true);
            }
            else
            {
                m_log.Warn("Dropping instant message from " + fromName + " to " + toAgentID + " that does not exist in the local scene");
                return(false);
            }
        }
Exemplo n.º 6
0
        public bool SendInstantMessage(UUID messageID, UUID toAgentID, string fromName, Vector3 fromPosition, 
            UUID fromRegionID, bool fromGroup, InstantMessageDialog type, string message, bool allowOffline, 
            DateTime timestamp, byte[] binaryBucket)
        {
            // Cap the message length at 1023 + null terminator
            if (!String.IsNullOrEmpty(message) && message.Length > 1023)
                message = message.Substring(0, 1023);

            // FIXME: Support IMing to remote agents
            IScenePresence presence;
            if (m_scene.TryGetPresence(toAgentID, out presence) && presence is LLAgent)
            {
                LLAgent agent = (LLAgent)presence;

                ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket();
                im.AgentData.AgentID = agent.ID;
                im.MessageBlock.Dialog = (byte)type;
                im.MessageBlock.FromAgentName = Utils.StringToBytes(fromName);
                im.MessageBlock.FromGroup = fromGroup;
                im.MessageBlock.ID = messageID;
                im.MessageBlock.Message = Utils.StringToBytes(message);
                im.MessageBlock.Offline = (byte)((allowOffline) ? 1 : 0);
                im.MessageBlock.ParentEstateID = 0;
                im.MessageBlock.Position = fromPosition;
                im.MessageBlock.RegionID = fromRegionID;
                im.MessageBlock.Timestamp = Utils.DateTimeToUnixTime(timestamp);
                im.MessageBlock.ToAgentID = agent.ID;
                im.MessageBlock.BinaryBucket = binaryBucket ?? Utils.EmptyBytes;

                m_udp.SendPacket(agent, im, ThrottleCategory.Task, false);
                return true;
            }
            else
            {
                m_log.Warn("Dropping instant message from " + fromName + " to " + toAgentID + " that does not exist in the local scene");
                return false;
            }
        }
Exemplo n.º 7
0
        void ImprovedInstantMessageHandler(Packet packet, Agent agent)
        {
            ImprovedInstantMessagePacket im     = (ImprovedInstantMessagePacket)packet;
            InstantMessageDialog         dialog = (InstantMessageDialog)im.MessageBlock.Dialog;

            if (dialog == InstantMessageDialog.MessageFromAgent)
            {
                lock (server.Agents)
                {
                    foreach (Agent recipient in server.Agents.Values)
                    {
                        if (recipient.AgentID == im.MessageBlock.ToAgentID)
                        {
                            ImprovedInstantMessagePacket sendIM = new ImprovedInstantMessagePacket();
                            sendIM.MessageBlock.RegionID       = UUID.Random(); //FIXME
                            sendIM.MessageBlock.ParentEstateID = 1;
                            sendIM.MessageBlock.FromGroup      = false;
                            sendIM.MessageBlock.FromAgentName  = Utils.StringToBytes(agent.Avatar.Name);
                            sendIM.MessageBlock.ToAgentID      = im.MessageBlock.ToAgentID;
                            sendIM.MessageBlock.Dialog         = im.MessageBlock.Dialog;
                            sendIM.MessageBlock.Offline        = (byte)InstantMessageOnline.Online;
                            sendIM.MessageBlock.ID             = agent.AgentID;
                            sendIM.MessageBlock.Message        = im.MessageBlock.Message;
                            sendIM.MessageBlock.BinaryBucket   = new byte[0];
                            sendIM.MessageBlock.Timestamp      = 0;
                            sendIM.MessageBlock.Position       = agent.Avatar.Position;

                            sendIM.AgentData.AgentID = agent.AgentID;

                            server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);

                            break;
                        }
                    }
                }
            }
        }
        private void Self_OnMessage(string FromAgentName, UUID FromAgentID, UUID ToAgentID,
                                    string Message, UUID IMSessionID, bool GroupIM,
                                    UUID RegionID, Vector3 Position,
                                    InstantMessageDialog Dialog, ChatType Type, EventArgs origin)
        {
            if (Dialog == InstantMessageDialog.GroupNotice)
            {
                GroupIM = true;
            }

            BotPermissions perms = GetSecurityLevel(FromAgentID, FromAgentName);

            // Received an IM from someone that is authenticated
            if (Type == ChatType.OwnerSay)
            {
                perms |= BotPermissions.Owner;
            }

            bool displayedMessage = false;

            if (origin is ChatEventArgs && Message.Length > 0 && Dialog == InstantMessageDialog.MessageFromAgent)
            {
                WriteLine(String.Format("{0} says, \"{1}\".", FromAgentName, Message));
                PosterBoard["/posterboard/onchat"] = Message;
                if (FromAgentName == Self.Name)
                {
                    PosterBoard["/posterboard/onchat-said"] = Message;
                }
                else
                {
                    PosterBoard["/posterboard/onchat-heard"] = Message;
                }
            }

            bool groupIM = GroupIM && GroupMembers != null && GroupMembers.ContainsKey(FromAgentID) ? true : false;


            switch (Dialog)
            {
            case InstantMessageDialog.MessageBox:
                break;

            case InstantMessageDialog.GroupInvitation:
                if ((perms & BotPermissions.AcceptGroupAndFriendRequests) != 0)
                {
                    string groupName = Message;
                    int    found     = groupName.IndexOf("Group:");
                    if (found > 0)
                    {
                        groupName = groupName.Substring(found + 6);
                    }
                    Self.InstantMessage(Self.Name, FromAgentID, string.Empty, IMSessionID,
                                        InstantMessageDialog.GroupInvitationAccept, InstantMessageOnline.Offline,
                                        Self.SimPosition,
                                        UUID.Zero, new byte[0]);
                    found = groupName.IndexOf(":");
                    if (found > 0)
                    {
                        groupName = groupName.Substring(0, found).Trim();
                        ExecuteCommand("joingroup " + groupName, CMDFLAGS.NoResult);
                    }
                }
                break;

            case InstantMessageDialog.InventoryOffered:
                break;

            case InstantMessageDialog.InventoryAccepted:
                break;

            case InstantMessageDialog.InventoryDeclined:
                break;

            case InstantMessageDialog.GroupVote:
                break;

            case InstantMessageDialog.TaskInventoryOffered:
                break;

            case InstantMessageDialog.TaskInventoryAccepted:
                break;

            case InstantMessageDialog.TaskInventoryDeclined:
                break;

            case InstantMessageDialog.NewUserDefault:
                break;

            case InstantMessageDialog.SessionAdd:
                break;

            case InstantMessageDialog.SessionOfflineAdd:
                break;

            case InstantMessageDialog.SessionGroupStart:
                break;

            case InstantMessageDialog.SessionCardlessStart:
                break;

            case InstantMessageDialog.SessionSend:
                break;

            case InstantMessageDialog.SessionDrop:
                break;

            case InstantMessageDialog.BusyAutoResponse:
                break;

            case InstantMessageDialog.ConsoleAndChatHistory:
                break;

            case InstantMessageDialog.Lure911:
            case InstantMessageDialog.RequestTeleport:
                if ((perms & BotPermissions.AcceptTeleport) != 0)
                {
                    TheSimAvatar.StopMoving();
                    if (RegionID != UUID.Zero)
                    {
                        if (!displayedMessage)
                        {
                            DisplayNotificationInChat("TP to Lure from " + FromAgentName);
                            displayedMessage = true;
                        }
                        SimRegion R = SimRegion.GetRegion(RegionID, gridClient);
                        if (R != null)
                        {
                            Self.Teleport(R.RegionHandle, Position);
                            return;
                        }
                    }
                    DisplayNotificationInChat("Accepting TP Lure from " + FromAgentName);
                    displayedMessage = true;
                    Self.TeleportLureRespond(FromAgentID, IMSessionID, true);
                }
                break;

            case InstantMessageDialog.AcceptTeleport:
                break;

            case InstantMessageDialog.DenyTeleport:
                break;

            case InstantMessageDialog.GodLikeRequestTeleport:
                break;

            //  case InstantMessageDialog.CurrentlyUnused:
            //    break;
            case InstantMessageDialog.GotoUrl:
                break;

            case InstantMessageDialog.Session911Start:
                break;

            case InstantMessageDialog.FromTaskAsAlert:
                break;

            case InstantMessageDialog.GroupNotice:
                break;

            case InstantMessageDialog.GroupNoticeInventoryAccepted:
                break;

            case InstantMessageDialog.GroupNoticeInventoryDeclined:
                break;

            case InstantMessageDialog.GroupInvitationAccept:
                break;

            case InstantMessageDialog.GroupInvitationDecline:
                break;

            case InstantMessageDialog.GroupNoticeRequested:
                break;

            case InstantMessageDialog.FriendshipOffered:
                if ((perms & BotPermissions.AcceptGroupAndFriendRequests) != 0)
                {
                    DisplayNotificationInChat("Accepting Friendship from " + FromAgentName);
                    Friends.AcceptFriendship(FromAgentID, IMSessionID);
                    displayedMessage = true;
                }
                break;

            case InstantMessageDialog.FriendshipAccepted:
                break;

            case InstantMessageDialog.FriendshipDeclined:
                break;

            case InstantMessageDialog.StartTyping:
                break;

            case InstantMessageDialog.StopTyping:
                break;

            case InstantMessageDialog.MessageFromObject:
            case InstantMessageDialog.MessageFromAgent:
                // message from self
                if (FromAgentName == GetName())
                {
                    return;
                }
                // message from system
                if (FromAgentName == "System")
                {
                    return;
                }
                // message from others
                CommandInstance ci;
                if (Commands.TryGetValue("im", out ci))
                {
                    var whisper = ci.WithBotClient as Cogbot.Actions.Communication.ImCommand;
                    if (whisper != null)
                    {
                        whisper.currentAvatar  = FromAgentID;
                        whisper.currentSession = IMSessionID;
                    }
                }
                var cea = origin as ChatEventArgs;
                if ((perms & BotPermissions.ExecuteCommands) != 0)
                {
                    OutputDelegate WriteLine;
                    if (origin is InstantMessageEventArgs)
                    {
                        WriteLine = new OutputDelegate(
                            (string text, object[] ps) =>
                        {
                            string reply0 = DLRConsole.SafeFormat(text, ps);
                            InstantMessage(FromAgentID, reply0, IMSessionID);
                        });
                    }
                    else
                    {
                        WriteLine = new OutputDelegate(
                            (string text, object[] ps) =>
                        {
                            string reply0 = DLRConsole.SafeFormat(text, ps);
                            Talk(reply0, 0, Type);
                        });
                    }
                    string   cmd        = Message;
                    CMDFLAGS needResult = CMDFLAGS.Console;
                    if (cmd.StartsWith("cmcmd "))
                    {
                        cmd = cmd.Substring(6);
                        WriteLine("");
                        WriteLine(string.Format("invokecm='{0}'", cmd));
                        ClientManager.DoCommandAll(cmd, FromAgentID, WriteLine);
                    }
                    else if (cmd.StartsWith("cmd "))
                    {
                        cmd = cmd.Substring(4);
                        WriteLine(string.Format("invoke='{0}'", cmd));
                        var res = ExecuteCommand(cmd, FromAgentID, WriteLine, needResult);
                        WriteLine("iresult='" + res + "'");
                    }
                    else if (cmd.StartsWith("/") || cmd.StartsWith("@"))
                    {
                        cmd = cmd.Substring(1);
                        WriteLine("");
                        WriteLine(string.Format("invoke='{0}'", cmd));
                        var res = ExecuteCommand(cmd, FromAgentID, WriteLine, needResult);
                        WriteLine("iresult='" + res + "'");
                    }
                }
                if (cea != null && cea.AudibleLevel == ChatAudibleLevel.Barely)
                {
                    return;
                }
                break;

            default:
                break;
            }
            //if (Dialog != InstantMessageDialog.MessageFromAgent && Dialog != InstantMessageDialog.MessageFromObject)
            {
                string debug = String.Format("{0} {1} {2} {3} {4} {5}: {6}",
                                             groupIM ? "GroupIM" : "IM", Dialog, Type, perms, FromAgentID, FromAgentName,
                                             Helpers.StructToString(origin));
                if (!displayedMessage)
                {
                    DisplayNotificationInChat(debug);
                    displayedMessage = true;
                }
            }
        }
Exemplo n.º 9
0
 /// <summary>
 /// Displayed on Instant Message
 /// FIXME - ditch objectNotAgent
 /// </summary>
 public static void InstantMessage(uint sessionNum, InstantMessageDialog dialog, string fromName, string message)
 {
     string type = "";
     type = " (" + dialog.ToString() + ")";
     if (dialog == InstantMessageDialog.MessageFromObject) SetColor(ConsoleColor.DarkCyan);
     else SetColor(ConsoleColor.Cyan);
     Console.WriteLine("({0}) {1}{2}: {3}", sessionNum, fromName, type, message);
     SetColor(ConsoleColor.Gray);
 }
Exemplo n.º 10
0
        /// <summary>
        /// Deserialize the message
        /// </summary>
        /// <param name="map">An <see cref="OSDMap"/> containing the data</param>
        public void Deserialize(OSDMap map)
        {
            if (map.ContainsKey("voice"))
            {
                FromAgentID = map["from_id"].AsUUID();
                FromAgentName = map["from_name"].AsString();
                IMSessionID = map["session_id"].AsUUID();
                BinaryBucket = Utils.StringToBytes(map["session_name"].AsString());
                Voice = true;
            }
            else
            {
                OSDMap im = (OSDMap)map["instantmessage"];
                OSDMap msg = (OSDMap)im["message_params"];
                OSDMap msgdata = (OSDMap)msg["data"];

                FromAgentID = msg["from_id"].AsUUID();
                FromAgentName = msg["from_name"].AsString();
                ToAgentID = msg["to_id"].AsUUID();
                ParentEstateID = (uint)msg["parent_estate_id"].AsInteger();
                RegionID = msg["region_id"].AsUUID();
                Position = msg["position"].AsVector3();
                GroupIM = msg["from_group"].AsBoolean();
                IMSessionID = msg["id"].AsUUID();
                Message = msg["message"].AsString();
                Offline = (InstantMessageOnline)msg["offline"].AsInteger();
                Dialog = (InstantMessageDialog)msgdata["type"].AsInteger();
                BinaryBucket = msgdata["binary_bucket"].AsBinary();
                Timestamp = msgdata["timestamp"].AsDate();
                Voice = false;
            }
        }
Exemplo n.º 11
0
 private void SendReply(InstantMessageDialog dialog, byte[] bucket)
 {
     client.Self.InstantMessage(client.Self.Name, msg.FromAgentID, string.Empty, msg.IMSessionID, dialog, InstantMessageOnline.Offline, client.Self.SimPosition, client.Network.CurrentSim.RegionID, bucket);
 }
Exemplo n.º 12
0
        private void SendReply(InstantMessageDialog dialog, byte[] bucket)
        {
            client.Self.InstantMessage(client.Self.Name, msg.FromAgentID, string.Empty, msg.IMSessionID, dialog, InstantMessageOnline.Offline, client.Self.SimPosition, client.Network.CurrentSim.RegionID, bucket);

            if (dialog == InstantMessageDialog.InventoryAccepted)
            {
                client.Inventory.RequestFetchInventory(objectID, client.Self.AgentID);
            }
        }
Exemplo n.º 13
0
        private void Self_OnMessage(string FromAgentName, UUID FromAgentID, UUID ToAgentID,
            string Message, UUID IMSessionID, bool GroupIM,
            UUID RegionID, Vector3 Position,
            InstantMessageDialog Dialog, ChatType Type, EventArgs origin)
        {
            if (Dialog == InstantMessageDialog.GroupNotice)
            {
                GroupIM = true;
            }

            BotPermissions perms = GetSecurityLevel(FromAgentID, FromAgentName);

            // Received an IM from someone that is authenticated
            if (Type == ChatType.OwnerSay)
            {
                perms |= BotPermissions.Owner;
            }

            bool displayedMessage = false;
            if (origin is ChatEventArgs && Message.Length > 0 && Dialog == InstantMessageDialog.MessageFromAgent)
            {
                WriteLine(String.Format("{0} says, \"{1}\".", FromAgentName, Message));
                PosterBoard["/posterboard/onchat"] = Message;
                if (FromAgentName == Self.Name)
                {
                    PosterBoard["/posterboard/onchat-said"] = Message;
                }
                else
                {
                    PosterBoard["/posterboard/onchat-heard"] = Message;
                }
            }

            bool groupIM = GroupIM && GroupMembers != null && GroupMembers.ContainsKey(FromAgentID) ? true : false;


            switch (Dialog)
            {
                case InstantMessageDialog.MessageBox:
                    break;
                case InstantMessageDialog.GroupInvitation:
                    if ((perms & BotPermissions.AcceptGroupAndFriendRequests) != 0)
                    {
                        string groupName = Message;
                        int found = groupName.IndexOf("Group:");
                        if (found > 0) groupName = groupName.Substring(found + 6);
                        Self.InstantMessage(Self.Name, FromAgentID, string.Empty, IMSessionID,
                                            InstantMessageDialog.GroupInvitationAccept, InstantMessageOnline.Offline,
                                            Self.SimPosition,
                                            UUID.Zero, new byte[0]);
                        found = groupName.IndexOf(":");
                        if (found > 0)
                        {
                            groupName = groupName.Substring(0, found).Trim();
                            ExecuteCommand("joingroup " + groupName, CMDFLAGS.NoResult);
                        }
                    }
                    break;
                case InstantMessageDialog.InventoryOffered:
                    break;
                case InstantMessageDialog.InventoryAccepted:
                    break;
                case InstantMessageDialog.InventoryDeclined:
                    break;
                case InstantMessageDialog.GroupVote:
                    break;
                case InstantMessageDialog.TaskInventoryOffered:
                    break;
                case InstantMessageDialog.TaskInventoryAccepted:
                    break;
                case InstantMessageDialog.TaskInventoryDeclined:
                    break;
                case InstantMessageDialog.NewUserDefault:
                    break;
                case InstantMessageDialog.SessionAdd:
                    break;
                case InstantMessageDialog.SessionOfflineAdd:
                    break;
                case InstantMessageDialog.SessionGroupStart:
                    break;
                case InstantMessageDialog.SessionCardlessStart:
                    break;
                case InstantMessageDialog.SessionSend:
                    break;
                case InstantMessageDialog.SessionDrop:
                    break;
                case InstantMessageDialog.BusyAutoResponse:
                    break;
                case InstantMessageDialog.ConsoleAndChatHistory:
                    break;
                case InstantMessageDialog.Lure911:
                case InstantMessageDialog.RequestTeleport:
                    if ((perms & BotPermissions.AcceptTeleport) != 0)
                    {
                        TheSimAvatar.StopMoving();
                        if (RegionID != UUID.Zero)
                        {
                            if (!displayedMessage)
                            {
                                DisplayNotificationInChat("TP to Lure from " + FromAgentName);
                                displayedMessage = true;
                            }
                            SimRegion R = SimRegion.GetRegion(RegionID, gridClient);
                            if (R != null)
                            {
                                Self.Teleport(R.RegionHandle, Position);
                                return;
                            }
                        }
                        DisplayNotificationInChat("Accepting TP Lure from " + FromAgentName);
                        displayedMessage = true;
                        Self.TeleportLureRespond(FromAgentID, IMSessionID, true);
                    }
                    break;
                case InstantMessageDialog.AcceptTeleport:
                    break;
                case InstantMessageDialog.DenyTeleport:
                    break;
                case InstantMessageDialog.GodLikeRequestTeleport:
                    break;
              //  case InstantMessageDialog.CurrentlyUnused:
                //    break;
                case InstantMessageDialog.GotoUrl:
                    break;
                case InstantMessageDialog.Session911Start:
                    break;
                case InstantMessageDialog.FromTaskAsAlert:
                    break;
                case InstantMessageDialog.GroupNotice:
                    break;
                case InstantMessageDialog.GroupNoticeInventoryAccepted:
                    break;
                case InstantMessageDialog.GroupNoticeInventoryDeclined:
                    break;
                case InstantMessageDialog.GroupInvitationAccept:
                    break;
                case InstantMessageDialog.GroupInvitationDecline:
                    break;
                case InstantMessageDialog.GroupNoticeRequested:
                    break;
                case InstantMessageDialog.FriendshipOffered:
                    if ((perms & BotPermissions.AcceptGroupAndFriendRequests) != 0)
                    {
                        DisplayNotificationInChat("Accepting Friendship from " + FromAgentName);
                        Friends.AcceptFriendship(FromAgentID, IMSessionID);
                        displayedMessage = true;
                    }
                    break;
                case InstantMessageDialog.FriendshipAccepted:
                    break;
                case InstantMessageDialog.FriendshipDeclined:
                    break;
                case InstantMessageDialog.StartTyping:
                    break;
                case InstantMessageDialog.StopTyping:
                    break;
                case InstantMessageDialog.MessageFromObject:
                case InstantMessageDialog.MessageFromAgent:
                    // message from self
                    if (FromAgentName == GetName()) return;
                    // message from system
                    if (FromAgentName == "System") return;
                    // message from others
                    CommandInstance ci;
                    if (Commands.TryGetValue("im", out ci))
                    {
                        var whisper = ci.WithBotClient as Cogbot.Actions.Communication.ImCommand;
                        if (whisper != null)
                        {
                            whisper.currentAvatar = FromAgentID;
                            whisper.currentSession = IMSessionID;
                        }
                    }
                    var cea = origin as ChatEventArgs;
                    if ((perms & BotPermissions.ExecuteCommands) != 0)
                    {
                        OutputDelegate WriteLine;
                        if (origin is InstantMessageEventArgs)
                        {
                            WriteLine = new OutputDelegate(
                                (string text, object[] ps) =>
                                    {
                                        string reply0 = DLRConsole.SafeFormat(text, ps);
                                        InstantMessage(FromAgentID, reply0, IMSessionID);
                                    });
                        }
                        else
                        {
                            WriteLine = new OutputDelegate(
                                (string text, object[] ps) =>
                                    {
                                        string reply0 = DLRConsole.SafeFormat(text, ps);
                                        Talk(reply0, 0, Type);
                                    });
                        }
                        string cmd = Message;
                        CMDFLAGS needResult = CMDFLAGS.Console;
                        if (cmd.StartsWith("cmcmd "))
                        {
                            cmd = cmd.Substring(6);
                            WriteLine("");
                            WriteLine(string.Format("invokecm='{0}'", cmd));
                            ClientManager.DoCommandAll(cmd, FromAgentID, WriteLine);
                        }
                        else if (cmd.StartsWith("cmd "))
                        {
                            cmd = cmd.Substring(4);
                            WriteLine(string.Format("invoke='{0}'", cmd));
                            var res = ExecuteCommand(cmd, FromAgentID, WriteLine, needResult);
                            WriteLine("iresult='" + res + "'");
                        }
                        else if (cmd.StartsWith("/") || cmd.StartsWith("@"))
                        {
                            cmd = cmd.Substring(1);
                            WriteLine("");
                            WriteLine(string.Format("invoke='{0}'", cmd));
                            var res = ExecuteCommand(cmd, FromAgentID, WriteLine, needResult);
                            WriteLine("iresult='" + res + "'");
                        }
                    }
                    if (cea != null && cea.AudibleLevel == ChatAudibleLevel.Barely) return;
                    break;
                default:
                    break;
            }
            //if (Dialog != InstantMessageDialog.MessageFromAgent && Dialog != InstantMessageDialog.MessageFromObject)
            {
                string debug = String.Format("{0} {1} {2} {3} {4} {5}: {6}",
                                             groupIM ? "GroupIM" : "IM", Dialog, Type, perms, FromAgentID, FromAgentName,
                                             Helpers.StructToString(origin));
                if (!displayedMessage)
                {
                    DisplayNotificationInChat(debug);
                    displayedMessage = true;
                }
            }
        }
Exemplo n.º 14
0
        private void ImprovedInstantMessageHandler(Packet packet, LLAgent agent)
        {
            ImprovedInstantMessagePacket im = (ImprovedInstantMessagePacket)packet;

            // The following fields are unused since we already have this information, plus the
            // client could forge it:
            // - im.MessageBlock.FromAgentName
            // - im.MessageBlock.FromGroup;
            // - im.MessageBlock.RegionID
            // - im.MessageBlock.Position
            // - im.MessageBlock.Timestamp
            // - im.MessageBlock.ParentEstateID

            InstantMessageDialog type = (InstantMessageDialog)im.MessageBlock.Dialog;
            string message            = Utils.BytesToString(im.MessageBlock.Message);
            bool   allowOffline       = (im.MessageBlock.Offline != 0);

            switch (type)
            {
            case InstantMessageDialog.MessageFromAgent:
            case InstantMessageDialog.StartTyping:
            case InstantMessageDialog.StopTyping:
                SendInstantMessage(im.MessageBlock.ID, im.MessageBlock.ToAgentID, agent.Name,
                                   agent.ScenePosition, agent.Scene.ID, false, type, message, allowOffline,
                                   DateTime.UtcNow, im.MessageBlock.BinaryBucket);
                break;

            case InstantMessageDialog.RequestTeleport:
            case InstantMessageDialog.GodLikeRequestTeleport:
            case InstantMessageDialog.Lure911:
            case InstantMessageDialog.AcceptTeleport:
            case InstantMessageDialog.DenyTeleport:
            case InstantMessageDialog.BusyAutoResponse:
                break;

            case InstantMessageDialog.FriendshipOffered:
            case InstantMessageDialog.FriendshipAccepted:
            case InstantMessageDialog.FriendshipDeclined:
                break;

            case InstantMessageDialog.GroupInvitation:
            case InstantMessageDialog.GroupInvitationAccept:
            case InstantMessageDialog.GroupInvitationDecline:
                break;

            case InstantMessageDialog.GroupNotice:
            case InstantMessageDialog.GroupNoticeRequested:
            case InstantMessageDialog.GroupNoticeInventoryAccepted:
            case InstantMessageDialog.GroupNoticeInventoryDeclined:
            case InstantMessageDialog.GroupVote:
                break;

            case InstantMessageDialog.InventoryOffered:
            case InstantMessageDialog.InventoryAccepted:
            case InstantMessageDialog.InventoryDeclined:
                break;

            case InstantMessageDialog.TaskInventoryOffered:
            case InstantMessageDialog.TaskInventoryAccepted:
            case InstantMessageDialog.TaskInventoryDeclined:
                break;

            case InstantMessageDialog.SessionAdd:
            case InstantMessageDialog.SessionOfflineAdd:
            case InstantMessageDialog.SessionCardlessStart:
            case InstantMessageDialog.Session911Start:
            case InstantMessageDialog.SessionDrop:
            case InstantMessageDialog.SessionGroupStart:
            case InstantMessageDialog.SessionSend:
                break;

            //case InstantMessageDialog.MessageFromObject:
            //case InstantMessageDialog.FromTaskAsAlert:
            //case InstantMessageDialog.MessageBox:
            //case InstantMessageDialog.GotoUrl:
            //case InstantMessageDialog.ConsoleAndChatHistory:
            //case InstantMessageDialog.NewUserDefault:
            default:
                m_log.Warn("Received an IM with unhandled type " + type + " from " + agent.Name);
                return;
            }
        }
Exemplo n.º 15
0
 private void SendReply(InstantMessageDialog dialog, byte[] bucket)
 {
     client.Self.InstantMessage(client.Self.Name, msg.FromAgentID, string.Empty, msg.IMSessionID, dialog, InstantMessageOnline.Offline, client.Self.SimPosition, client.Network.CurrentSim.RegionID, bucket);
 }
Exemplo n.º 16
0
        public override void Self_OnInstantMessage(object sender, InstantMessageEventArgs e)
        {
            var im = e.IM;

            if (im.FromAgentID != UUID.Zero)
            {
                AddName2Key(im.FromAgentName, im.FromAgentID);
                if (im.RegionID != UUID.Zero)
                {
                    AvatarRegion[im.FromAgentID] = im.RegionID;
                    Debug("Avatar region " + im.FromAgentName + " " + im.RegionID);
                }
            }
            bool Conference = false;
            bool GroupIM    = im.GroupIM || client.Groups.GroupName2KeyCache.ContainsKey(im.IMSessionID);

            if (GroupIM)
            {
                DeclareGroup(im.IMSessionID);
            }
            if (im.Dialog == InstantMessageDialog.SessionSend)
            {
                if (!GroupIM)
                {
                    Conference = true;
                }
            }

            PCode  pcode = PCode.None;
            object s     = im.FromAgentName;

            if (string.IsNullOrEmpty(im.FromAgentName) || im.FromAgentName == "Object" || !im.FromAgentName.Contains(" "))
            {
                s     = im.FromAgentID;
                pcode = PCode.Prim;
            }
            else
            {
                pcode = PCode.Avatar;
            }
            InstantMessageDialog d = im.Dialog;

            if (d == InstantMessageDialog.StartTyping || d == InstantMessageDialog.StopTyping)
            {
                pcode = PCode.Avatar;
            }
            if (!Conference && GroupIM)
            {
                //"recipientOfInfo-Intended";
            }
            SimObject source = AsObject(im.FromAgentName, im.FromAgentID, pcode);

            if (source != null)
            {
                s = source;
            }
            object location = AsLocation(im.RegionID, im.Position);

            EventQueue.Enqueue(() =>
                               client.SendPersonalEvent(SimEventType.SOCIAL, "InstantMessageDialog-" + im.Dialog.ToString() + (GroupIM ? "-Group" : ""),
                                                        ToParameter("senderOfInfo", s),
                                                        ToParameter("infoTransferred-NLString", im.Message),
                                                        ToParameter("recipientOfInfo-Intended", im.ToAgentID),
                                                        im.Offline,
                                                        im.IMSessionID,
                                                        ToParameter("eventPrimarilyOccursAt", location),
                                                        //(im.GroupIM ? "GroupIM" : ""),
                                                        //im.Dialog,
                                                        im.ParentEstateID));
        }
Exemplo n.º 17
0
        /// <summary>
        /// Send an Instant Message
        /// </summary>
        /// <param name="fromName">The name this IM will show up as being from</param>
        /// <param name="target">Key of Avatar</param>
        /// <param name="message">Text message being sent</param>
        /// <param name="imSessionID">IM session ID (to differentiate between IM windows)</param>
        /// <param name="dialog">Type of instant message to send</param>
        /// <param name="offline">Whether to IM offline avatars as well</param>
        /// <param name="position"></param>
        /// <param name="regionID"></param>
        /// <param name="binaryBucket">Packed binary data that is specific to
        /// the dialog type</param>
        public void InstantMessage(string fromName, LLUUID target, string message, LLUUID imSessionID, 
            InstantMessageDialog dialog, InstantMessageOnline offline, LLVector3 position, LLUUID regionID, 
            byte[] binaryBucket)
        {
            ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket();

            im.AgentData.AgentID = Client.Self.AgentID;
            im.AgentData.SessionID = Client.Self.SessionID;

            im.MessageBlock.Dialog = (byte)dialog;
            im.MessageBlock.FromAgentName = Helpers.StringToField(fromName);
            im.MessageBlock.FromGroup = false;
            im.MessageBlock.ID = imSessionID;
            im.MessageBlock.Message = Helpers.StringToField(message);
            im.MessageBlock.Offline = (byte)offline;
            im.MessageBlock.ToAgentID = target;

            if (binaryBucket != null)
                im.MessageBlock.BinaryBucket = binaryBucket;
            else
                im.MessageBlock.BinaryBucket = new byte[0];

            // These fields are mandatory, even if we don't have valid values for them
            im.MessageBlock.Position = LLVector3.Zero;
            //TODO: Allow region id to be correctly set by caller or fetched from Client.*
            im.MessageBlock.RegionID = regionID;

            // Send the message
            Client.Network.SendPacket(im);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Send an Instant Message
        /// </summary>
        /// <param name="fromName">The name this IM will show up as being from</param>
        /// <param name="target">Key of Avatar</param>
        /// <param name="message">Text message being sent</param>
        /// <param name="imSessionID">IM session ID (to differentiate between IM windows)</param>
        /// <param name="dialog">Type of instant message to send</param>
        /// <param name="offline">Whether to IM offline avatars as well</param>
        /// <param name="position">Senders Position</param>
        /// <param name="regionID">RegionID Sender is In</param>
        /// <param name="binaryBucket">Packed binary data that is specific to
        /// the dialog type</param>
        public void InstantMessage(string fromName, UUID target, string message, UUID imSessionID,
            InstantMessageDialog dialog, InstantMessageOnline offline, Vector3 position, UUID regionID,
            byte[] binaryBucket)
        {
            if (target != UUID.Zero)
            {
                ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket();

                if (imSessionID.Equals(UUID.Zero) || imSessionID.Equals(AgentID))
                    imSessionID = AgentID.Equals(target) ? AgentID : target ^ AgentID;

                im.AgentData.AgentID = Client.Self.AgentID;
                im.AgentData.SessionID = Client.Self.SessionID;

                im.MessageBlock.Dialog = (byte)dialog;
                im.MessageBlock.FromAgentName = Utils.StringToBytes(fromName);
                im.MessageBlock.FromGroup = false;
                im.MessageBlock.ID = imSessionID;
                im.MessageBlock.Message = Utils.StringToBytes(message);
                im.MessageBlock.Offline = (byte)offline;
                im.MessageBlock.ToAgentID = target;

                if (binaryBucket != null)
                    im.MessageBlock.BinaryBucket = binaryBucket;
                else
                    im.MessageBlock.BinaryBucket = Utils.EmptyBytes;

                // These fields are mandatory, even if we don't have valid values for them
                im.MessageBlock.Position = Vector3.Zero;
                //TODO: Allow region id to be correctly set by caller or fetched from Client.*
                im.MessageBlock.RegionID = regionID;

                // Send the message
                Client.Network.SendPacket(im);
            }
            else
            {
                Logger.Log(String.Format("Suppressing instant message \"{0}\" to UUID.Zero", message),
                    Helpers.LogLevel.Error, Client);
            }
        }
Exemplo n.º 19
0
        void ImprovedInstantMessageHandler(Packet packet, Agent agent)
        {
            ImprovedInstantMessagePacket im     = (ImprovedInstantMessagePacket)packet;
            InstantMessageDialog         dialog = (InstantMessageDialog)im.MessageBlock.Dialog;

            if (dialog == InstantMessageDialog.FriendshipOffered || dialog == InstantMessageDialog.FriendshipAccepted || dialog == InstantMessageDialog.FriendshipDeclined)
            {
                lock (server.Agents)
                {
                    foreach (Agent recipient in server.Agents.Values)
                    {
                        if (recipient.AgentID == im.MessageBlock.ToAgentID)
                        {
                            ImprovedInstantMessagePacket sendIM = new ImprovedInstantMessagePacket();
                            sendIM.MessageBlock.RegionID       = UUID.Random(); //FIXME
                            sendIM.MessageBlock.ParentEstateID = 1;
                            sendIM.MessageBlock.FromGroup      = false;
                            sendIM.MessageBlock.FromAgentName  = Utils.StringToBytes(agent.Avatar.Name);
                            sendIM.MessageBlock.ToAgentID      = im.MessageBlock.ToAgentID;
                            sendIM.MessageBlock.Dialog         = im.MessageBlock.Dialog;
                            sendIM.MessageBlock.Offline        = (byte)InstantMessageOnline.Online;
                            sendIM.MessageBlock.ID             = agent.AgentID;
                            sendIM.MessageBlock.Message        = im.MessageBlock.Message;
                            sendIM.MessageBlock.BinaryBucket   = new byte[0];
                            sendIM.MessageBlock.Timestamp      = 0;
                            sendIM.MessageBlock.Position       = agent.Avatar.Position;

                            sendIM.AgentData.AgentID = agent.AgentID;

                            server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);

                            if (dialog == InstantMessageDialog.FriendshipAccepted)
                            {
                                bool receiverOnline = server.Agents.ContainsKey(agent.AgentID);
                                bool senderOnline   = server.Agents.ContainsKey(recipient.AgentID);

                                if (receiverOnline)
                                {
                                    if (senderOnline)
                                    {
                                        OnlineNotificationPacket notify = new OnlineNotificationPacket();
                                        notify.AgentBlock            = new OnlineNotificationPacket.AgentBlockBlock[0];
                                        notify.AgentBlock[0]         = new OnlineNotificationPacket.AgentBlockBlock();
                                        notify.AgentBlock[0].AgentID = agent.AgentID;
                                        server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
                                    }
                                    else
                                    {
                                        OfflineNotificationPacket notify = new OfflineNotificationPacket();
                                        notify.AgentBlock            = new OfflineNotificationPacket.AgentBlockBlock[0];
                                        notify.AgentBlock[0]         = new OfflineNotificationPacket.AgentBlockBlock();
                                        notify.AgentBlock[0].AgentID = agent.AgentID;
                                        server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
                                    }
                                }

                                if (senderOnline)
                                {
                                    if (receiverOnline)
                                    {
                                        OnlineNotificationPacket notify = new OnlineNotificationPacket();
                                        notify.AgentBlock            = new OnlineNotificationPacket.AgentBlockBlock[0];
                                        notify.AgentBlock[0]         = new OnlineNotificationPacket.AgentBlockBlock();
                                        notify.AgentBlock[0].AgentID = recipient.AgentID;
                                        server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
                                    }
                                    else
                                    {
                                        OfflineNotificationPacket notify = new OfflineNotificationPacket();
                                        notify.AgentBlock            = new OfflineNotificationPacket.AgentBlockBlock[0];
                                        notify.AgentBlock[0]         = new OfflineNotificationPacket.AgentBlockBlock();
                                        notify.AgentBlock[0].AgentID = recipient.AgentID;
                                        server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
                                    }
                                }
                            }

                            break;
                        }
                    }
                }
            }
        }