-
-
Save diramazioni/185e8d30ca01a981d88a to your computer and use it in GitHub Desktop.
stub for making a chat plugin for blender
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bl_info = { | |
"name": "Chat on IRC", | |
"author": "Eli Spizzichino", | |
"version": (0, 0, 1), | |
"blender": (2, 7, 4), | |
"location": "Font Object Data > Chat on IRC", | |
"description": "Chat on IRC with asyncio", | |
"category": "Development"} | |
from irc3.plugins.command import command | |
import irc3 | |
from irc3.compat import asyncio | |
#import asyncio | |
from asyncio import coroutine, sleep, Task, wait_for | |
import asyncio_bridge | |
#from asyncio_bridge import BlenderListener | |
import bpy | |
from bpy.props import * | |
@irc3.plugin | |
class Plugin(object): | |
def __init__(self, bot): | |
self.bot = bot | |
@irc3.event(irc3.rfc.JOIN) | |
def say_hi(self, mask, channel): | |
"""Say hi when someone join a channel""" | |
if mask.nick != self.bot.nick: | |
self.bot.privmsg(channel, 'Hi %s!' % mask.nick) | |
#bpy.ops.dialog.message('INVOKE_DEFAULT', message = "hello") | |
else: | |
self.bot.privmsg(channel, 'Hi all!') | |
@command(permission='view') | |
def echo(self, mask, target, args): | |
"""Echo | |
%%echo <message>... | |
""" | |
yield ' '.join(args['<words>']) | |
bot = None | |
def irc_connect(prop): | |
loop = asyncio.get_event_loop() | |
#bot = irc3.IrcBot.from_argv(loop=loop) #blender crash | |
bot = irc3.IrcBot(loop=loop, | |
nick=prop.ircNick, autojoins=[prop.ircRoom], | |
host=prop.ircServer, port=prop.ircPort, ssl=False, | |
includes=[ | |
'irc3.plugins.core', | |
'irc3.plugins.command', | |
__name__, # this register MyPlugin | |
]).run(forever=False) | |
return bot # <-- bot is None | |
class ChatPanel_Props(bpy.types.PropertyGroup): | |
def initChat(self, context): | |
text = context.object | |
text.update_tag(refresh={'DATA'}) | |
text.data.body = "Hello" | |
isChatActive = BoolProperty(name='Chat Active', default=False, update=initChat) | |
ircRoom = StringProperty(name='Room', default='#irc3_test') | |
ircServer = StringProperty(name='Server', default='irc.freenode.net') | |
ircPort = IntProperty(name='Port', default=6667) | |
ircNick = StringProperty(name='Nick', default='achat') | |
ircMessage = StringProperty(name='Message', default='') | |
class ChatPanel(bpy.types.Panel): | |
"""Creates a ChatPanel Object properties window""" | |
bl_label = "Chat Panel" | |
bl_idname = "chat_panel" | |
bl_space_type = 'PROPERTIES' | |
bl_region_type = 'WINDOW' | |
bl_context = "data" | |
@classmethod | |
def poll(cls, context): | |
return context.object.type == 'FONT' | |
def draw_header(self, context): | |
self.layout.prop(context.object.data.chat_props, 'isChatActive', '') | |
def draw(self, context): | |
props = context.object.data.chat_props | |
layout = self.layout | |
layout.enabled = props.isChatActive | |
obj = context.object | |
row = layout.row() | |
row.label(text="Hello irc people!", icon='WORLD_DATA') | |
row = layout.row() | |
row.prop(props, "ircServer") | |
row.prop(props, "ircPort") | |
row = layout.row() | |
row.prop(props, "ircRoom") | |
row.prop(props, "ircNick") | |
row = layout.row() | |
row.operator("chat.connect") | |
row = layout.row() | |
row.prop(props, "ircMessage") | |
row = layout.row() | |
row.operator("chat.message") | |
class ConnectOperator(bpy.types.Operator): | |
bl_idname = "chat.connect" | |
bl_label = "connect" | |
def execute(self, context): | |
prop = context.object.data.chat_props | |
irc_connect(prop) | |
return {'FINISHED'} | |
class SendMessageOperator(bpy.types.Operator): | |
bl_idname = "chat.message" | |
bl_label = "say" | |
def execute(self, context): | |
bot.SIGHUP() | |
return {'FINISHED'} | |
def register(): | |
bpy.utils.register_class(ChatPanel_Props) | |
bpy.types.TextCurve.chat_props = PointerProperty(type = ChatPanel_Props) | |
bpy.utils.register_class(ChatPanel) | |
bpy.utils.register_class(ConnectOperator) | |
bpy.utils.register_class(SendMessageOperator) | |
def unregister(): | |
bpy.utils.unregister_class(ChatPanel_Props) | |
bpy.utils.unregister_class(ChatPanel) | |
bpy.utils.unregister_class(ConnectOperator) | |
bpy.utils.unregister_class(SendMessageOperator) | |
if __name__ == "__main__": | |
register() | |
asyncio_bridge.register() | |
bpy.ops.bpy.start_asyncio_bridge() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment