【发布时间】:2014-12-23 08:31:30
【问题描述】:
所以我想说的第一件事是:我一直在研究模块等,我只是不知道如何重写它以适应它。
项目:我拥有的是一个使用 Skype4Py 模块的 Skype Bot。我有大约 11 个命令,我注意到一个脚本变得有点大。
我正在尝试考虑如何将一个 main.py 文件链接到一个插件文件夹,该文件夹包含它自己可敬的 Python 文件中的每个机器人功能。这听起来很简单,除了函数的调用方式。
这里只是对我的 Skype 机器人的基本介绍,缺少一些更大的功能。
import Skype4Py, random
class SkypeBot():
def __init__(self):
self.skype = Skype4Py.Skype()
if self.skype.Client.IsRunning == False:
self.skype.Client.Start()
self.skype.Attach()
self.results = ['Yes', 'No', 'Maybe', 'Never']
def main(self):
print ' Skype Bot currently running on user: %s' % self.skype.CurrentUserHandle
print "\n\nCommands Called:\n"
while True:
self.skype.OnMessageStatus = self.RunFunction
def RunFunction(self, Message, Status):
if Status == 'SENT' or Status == 'RECEIVED':
cmd = Message.Body.split(' ')[0]
if cmd in self.functions.keys():
self.context = Message
self.caller = self.context.FromHandle
self.functions[cmd](self)
def ping(self):
print " %s : Ping" % self.caller
self.context.Chat.SendMessage('Pong')
def say(self):
try:
response = self.context.Body.split(' ', 1)
if response[1] == "-info":
print " %s : say -info" % self.caller
self.context.Chat.SendMessage("Resends the message entered. \n"
"Usage: !say Hello. \n"
"Example: Bot: Hello.")
else:
say = response[1]
print " %s : Say [%s]" % (self.caller, say)
self.context.Chat.SendMessage(say)
except:
self.context.Chat.SendMessage("Please use -info to properly use the !say command")
def eightball(self):
try:
question = self.context.Body.split(' ', 1)
if question[1] == "-info":
print " %s : 8Ball -info" % self.caller
self.context.Chat.SendMessage("Responds with an answer.\n"
"Usage: !8ball 'Do I have swag?'\n"
"Example: !8Ball Response: 'Yes'")
else:
random.shuffle(self.results)
answer = self.results[3]
print " %s : 8Ball [%s]" % (self.caller, question[1])
self.context.Chat.SendMessage("!8Ball Response: %s" % answer)
except:
self.context.Chat.SendMessage("Please use -info to properly use the !8ball command")
#FUNCTIONS LIST
#********************
functions = {
"!ping": ping,
"!say": say,
"!8ball": eightball,
}
if __name__ == "__main__":
snayer = SkypeBot()
snayer.main()
所以基本上,我在想什么,我该如何改变
self.skype.OnMessageStatus = self.RunFunction
让它运行另一个文件中的函数?
【问题讨论】:
-
尝试写下文件名,后跟类(如果有的话)和模块。
import Skype4Py然后通过编写Skype4Py.a_name()调用Skype4Py中的模块a_name()。让我知道这是否有效或您有任何问题。 -
我唯一的问题是我不明白我应该如何监听要调用的特定命令,因为目前我正在从同一个文件中调用它,但是如果我把它弄混了,我不知道如何听命令的调用。
-
应该是一样的,只是在模块名前面加上前缀。与使用
random模块相同,只是您创建了该模块。至于模块本身,你可以像在同一个文件中一样编写它。
标签: python function class module skype4py