diff plugins/xxchatnotify.py @ 0:4385a7d0efd1 grumpy-goblin

Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author sirebral
date Tue, 14 Jul 2009 16:41:58 -0500
parents
children c54768cffbd4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/xxchatnotify.py	Tue Jul 14 16:41:58 2009 -0500
@@ -0,0 +1,137 @@
+import os
+import orpg.pluginhandler
+import wx
+from orpg.orpgCore import *
+
+class Plugin(orpg.pluginhandler.PluginHandler): #Attempting to pass the orpgFrame so that we can Bind events, not working.
+    def __init__(self, plugindb, parent):
+        orpg.pluginhandler.PluginHandler.__init__(self, plugindb, parent)
+
+        # The Following code should be edited to contain the proper information
+        self.name = 'Chat Notification'
+        self.author = 'Dj Gilcrease'
+        self.help = 'This plugin with either play a sound when a new chat message comes in, flash the taskbar or both'
+
+    def plugin_menu(self):
+	#Plugin Menu
+        self.menu = wx.Menu()
+        self.notifyToggle = self.menu.AppendCheckItem(wx.ID_ANY, 'On')
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyToggle)
+
+        notify = wx.Menu()
+        self.notifyBeep = notify.AppendRadioItem(wx.ID_ANY, 'Beep')
+        self.notifyFlash = notify.AppendRadioItem(wx.ID_ANY, 'Flash')
+        self.notifyBoth = notify.AppendRadioItem(wx.ID_ANY, 'Both')
+        self.menu.AppendMenu(wx.ID_ANY, 'Notify', notify)
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyBeep)
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyFlash)
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyBoth)
+
+        notifyType = wx.Menu()
+        self.notifyAll = notifyType.AppendRadioItem(wx.ID_ANY, 'All')
+        self.notifyWhisper = notifyType.AppendRadioItem(wx.ID_ANY, 'Whisper')
+        self.menu.AppendMenu(wx.ID_ANY, 'Type', notifyType)
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyAll)
+        self.topframe.Bind(wx.EVT_MENU, self.on_settings, self.notifyWhisper)
+
+
+    def on_settings(self, evt):
+        if self.notifyToggle.IsChecked() == False:
+            self.notify = 'Off'
+            return
+        if self.notifyBeep.IsChecked() == True:
+            self.notify ='beep'
+        elif self.notifyFlash.IsChecked() == True:
+            self.notify = 'flash'
+        elif self.notifyBoth.IsChecked() == True:
+            self.notify = 'both'
+        if self.notifyAll.IsChecked() == True:
+            self.type = 'all'
+        elif self.notifyWhisper.IsChecked() == True:
+            self.type = 'whisper'
+
+
+    def plugin_enabled(self):
+        self.plugin_addcommand('/notify', self.on_notify, 'beep | flash | both | off | type all|whisper | clearsound | lsound soundfile [Local Sound Files only] | rsound http://to.sound.file [Remote Sound Files only] - This command turns on the chat notification. You can use sound files and flash by issuing /notify both')
+        self.notify = self.plugindb.GetString('xxchatnotify', 'notify', 'off')
+        self.type = self.plugindb.GetString('xxchatnotify', 'type', 'all')
+        self.mainframe = open_rpg.get_component('frame')
+        self.sound_player = open_rpg.get_component('sound')
+        self.soundloc = self.plugindb.GetString('xxchatnotify', 'soundloc', 'local')
+        self.soundfile = self.plugindb.GetString('xxchatnotify', 'soundfile', 'None')
+        self.chat_settings()
+
+    def chat_settings(self):
+        self.notifyToggle.Check(True)
+        if self.notify == 'beep':
+            self.notifyBeep.Check(True)
+        elif self.notify == 'flash':
+            self.notifyFlash.Check(True)
+        elif self.notify == 'both':
+            self.notifyBoth.Check(True)
+        else:
+            self.notifyToggle.Check(False)
+        if self.type == 'all':
+            self.notifyAll.Check(True)
+        elif self.type == 'whisper':
+            self.notifyWhisper.Check(True)
+
+    def plugin_disabled(self):
+        self.plugin_removecmd('/notify')
+
+    def on_notify(self, cmdargs):
+        args = cmdargs.split(None, 2)
+
+        if len(args) == 0:
+            self.chat.InfoPost('You must specify if you want it to beep, flash, both or be turned off or specify if you want to be notified for all messages or just whispers')
+
+        if args[0] == 'type':
+            self.type = args[1]
+            self.plugindb.SetString('xxchatnotify', 'type', self.type)
+            self.chat.InfoPost('Setting Notification on Message type to ' + args[1])
+            self.chat_settings()
+            return
+        elif args[0] == 'lsound':
+            self.soundloc = 'local'
+            self.soundfile = orpg.dirpath.dir_struct['plugins'] + args[1]
+            self.plugindb.SetString('xxchatnotify', 'soundfile', self.soundfile)
+            self.plugindb.GetString('xxchatnotify', 'soundloc', self.soundloc)
+            self.chat.InfoPost('Setting Sound file to ' + self.soundfile)
+            self.notify = 'beep'
+            return
+        elif args[0] == 'rsound':
+            self.soundloc = 'remote'
+            self.soundfile = args[1]
+            self.plugindb.SetString('xxchatnotify', 'soundfile', self.soundfile)
+            self.plugindb.GetString('xxchatnotify', 'soundloc', self.soundloc)
+            self.chat.InfoPost('Setting Sound file to ' + self.soundfile)
+            self.notify = 'beep'
+            return
+        elif args[0] == 'clearsound':
+            self.soundloc = 'local'
+            self.soundfile = 'None'
+            self.plugindb.SetString('xxchatnotify', 'soundfile', self.soundfile)
+            self.plugindb.GetString('xxchatnotify', 'soundloc', self.soundloc)
+            self.chat.InfoPost('Clearing Sound file')
+            self.notify = 'off'
+            return
+
+
+        self.notify = args[0]
+        self.plugindb.SetString('xxchatnotify', 'notify', self.notify)
+        self.chat.InfoPost('Setting Notification type to ' + args[0])
+        self.chat_settings()
+
+
+    def plugin_incoming_msg(self, text, type, name, player):
+        if (self.notify == 'beep' or self.notify == 'both') and (self.type == 'all' or type == 2):
+            if self.soundfile == 'None':
+                wx.CallAfter(wx.Bell)
+                wx.CallAfter(wx.Bell)
+            else:
+                wx.CallAfter(self.sound_player.play, self.soundfile, self.soundloc)
+        if (self.notify == 'flash' or self.notify == 'both') and (self.type == 'all' or type == 2):
+            wx.CallAfter(self.mainframe.RequestUserAttention)
+        return text, type, name
+
+