Register for your free account! | Forgot your password?

Go Back   elitepvpers > Metin2 > Metin2 PServer - Discussions / Questions > Metin2 PServer Guides & Strategies
You last visited: Today at 17:33

  • Please register to post and access all features, it's quick, easy and FREE!

 

[R]Internet/Weblink im Chat, anklickbar. Python 2.7

Reply
 
Old   #16
 
elite*gold: 0
Join Date: May 2013
Posts: 601
Received Thanks: 559
Quote:
Originally Posted by .Raicon View Post
Bau das ganze System noch aus und denk an einen sinnvollen "Filter", dann ist das ganze vil. doch ganz praktikabel.
Bringt mir nicht das weiter auszubauen, da wir es für unseren Server eh nicht benutzen.
Ich hab mit den oberen nur getextet damit die anderen/User das verbessern, und es in einer bessere Richtung editieren können.



Noa_ is offline  
Old   #17
 
elite*gold: 15
Join Date: Mar 2009
Posts: 295
Received Thanks: 149
Hallo Leute,

mal ne kleine Erweiterung.

* Nutzt das Ingame Webfenster
* Alle Links gehen https, http und www
* Funktioniert mit allen Python Versionen
* Weblinks per PM, Chat, Rufchat, Gildenchat,... versendbar
* Daten aus den Anhang des Erstellers werden nicht benötigt

uichat.py unter def __SendChatPacket(self, text, type):
wisper.py unter def SendWhisper(self):

folgendes ergänzen:
Code:
color = "FF1CC2"
text = re.sub("(^| )(http[s]?://.+?)( |$)", "\\1|cff%s|Hweblink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )(www\\..+?)( |$)", "\\1|cff%s|Hweblink:\\2|h\\2|h|r\\3" % (color,), text)
text = text.replace("https://", "")	
text = text.replace("http://", "")
und in der interfacemodule

Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
ersetzen durch

Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
			elif "Link" == type:
				self.OpenWebWindow(str(tokens[1]))
Viel Spass damit.
MFG Lordechen.


Lordechen is offline  
Thanks
1 User
Old   #18
 
elite*gold: 0
Join Date: Apr 2015
Posts: 433
Received Thanks: 362
Quote:
Originally Posted by Lordechen View Post
Hallo Leute,

mal ne kleine Erweiterung.

* Nutzt das Ingame Webfenster
* Alle Links gehen https, http und www
* Funktioniert mit allen Python Versionen
* Weblinks per PM, Chat, Rufchat, Gildenchat,... versendbar
* Daten aus den Anhang des Erstellers werden nicht benötigt

uichat.py unter def __SendChatPacket(self, text, type):
wisper.py unter def SendWhisper(self):

folgendes ergänzen:
Code:
color = "FF1CC2"
text = re.sub("(^| )([url]https://.+?)([/url] |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )([url]http://.+?)([/url] |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = re.sub("(^| )(www\\..+?)( |$)", "\\1|cff%s|HLink:\\2|h\\2|h|r\\3" % (color,), text)
text = text.replace("https://", "")	
text = text.replace("http://", "")
und in der interfacemodule

Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
ersetzen durch

Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
			elif "Link" == type:
				self.OpenWebWindow(str(tokens[1]))
Viel Spass damit.
MFG Lordechen.
Warum teilst du das ganze in drei re.sub-Prozesse ein?

Das Vorhaben

Code:
[EckigeKlammer]url[EckigeKlammer]
besagt, dass du entweder den Buchstaben u, r oder l erwartest.

Das Vorhaben

Code:
[EckigeKlammer]/url[EckigeKlammer]
besagt, dass du entweder das Zeichen / oder einen Buchstaben wie u, r, l erwartest. Wenn du wirklich tags machen willst, gibt's dazu flags:

PHP Code:
re.sub(flags=re.IGNORECASE)
re.sub(flags=re.I

Das Vorhaben

Code:
.+?
Erwartet 1 x-beliebiges Zeichen oder mehr oder garnichts. Also das gleiche wie:

Code:
.*
Das

Code:
https://
und das

Code:
http://
ist einfach nur

Code:
https?://
Wieso entfernst du danach die beiden Protokolle, dies ist wichtig und essenziell, bei einem Link
Code:
text = text.replace("https://", "")	
text = text.replace("http://", "")
Was ergibt das für einen Sinn?

PHP Code:
if tokens and len(tokens): 
Oder das?

PHP Code:
str(tokens[1]) 
Wieso typisiert man was, was bereits eine Zeichenkette ist?
#Metho is offline  
Old   #19
 
elite*gold: 15
Join Date: Mar 2009
Posts: 295
Received Thanks: 149
Bedank dich bei epvp das [url] stammt nicht von mir hat sich irgend wie rein gemogelt und wenn du meinst die Protokolle seien wichtig dann probiers aus dann wirst auch merken wiso sie gelöscht werden.
Im übrichen war das ne 2 Minuten arbeit mehr zeit opfer ich für epvp nicht wirklich und es funktioniert.


Lordechen is offline  
Old   #20
 
elite*gold: 0
Join Date: Jun 2016
Posts: 7
Received Thanks: 4
Quote:
Originally Posted by #Metho View Post
Code:
.+?
Erwartet 1 x-beliebiges Zeichen oder mehr oder garnichts. Also das gleiche wie:

Code:
.*
nicht ganz richtig.

Das ? steht in diesem Fall einfach für "non-greedy", das bedeutet, dass die Bedigung ".+" solange gematcht wird, bis die nachfolgende Bedingung zutrifft. Mit optional hat das an dieser Stelle nichts zu tun.

Beispiel:
Code:
import re

text = "Hello World! Irgendein weiterer Text!"
pattern = "(.+)\\!"

print(re.match(pattern, text).group(0))

--> Hello World! Irgendein weiterer Text!
Code:
import re

text = "Hello World! Irgendein weiterer Text!"
pattern = "(.+?)\\!"

print(re.match(pattern, text).group(0))

--> Hello World!
Beim 2. (mit non-greedy operator (?)) wird alles gematcht, bis die nächste Bedingung (das einzelne Zeichen "!") zutrifft.

Beim 1. wird solange gematcht, bis die die letzte Möglichkeit der nächsten Bedingung erreicht ist.
new Account("Undercover") is offline  
Thanks
1 User
Old   #21

 
elite*gold: 0
Join Date: Jul 2015
Posts: 892
Received Thanks: 298
Danke für dein Release
»DeneX« is offline  
Old   #22
 
elite*gold: 0
Join Date: Jun 2008
Posts: 61
Received Thanks: 39
Welcome spam
Niks90 is offline  
Old   #23
 
elite*gold: 0
Join Date: Aug 2013
Posts: 4
Received Thanks: 0
syserr

Code:
0725 11:44:33147 :: Traceback (most recent call last):

0725 11:44:33147 ::   File "uiChat.py", line 403, in OnIMEReturn

0725 11:44:33147 ::   File "uiChat.py", line 305, in __SendTalkingChatPacket

0725 11:44:33147 ::   File "uiChat.py", line 227, in __SendChatPacket

0725 11:44:33147 :: TypeError
0725 11:44:33147 :: : 
0725 11:44:33147 :: 'in <string>' requires character as left operand
0725 11:44:33147 ::
mehmettro2 is offline  
Old   #24
 
elite*gold: 15
Join Date: Mar 2009
Posts: 295
Received Thanks: 149
Wann lernt ihr es mal?
Ohne die datei zu sehen kann euch keiner helfen.
Also bite uichat.py anhängen
Lordechen is offline  
Old   #25
 
elite*gold: 0
Join Date: May 2014
Posts: 288
Received Thanks: 510
Habe ich gesucht danke.
.Liron is offline  
Old   #26
 
elite*gold: 50
Join Date: May 2011
Posts: 265
Received Thanks: 979
Much sexier!
(ew. need to add an exception into insultcheck for the urls )


Can handle ( | ftp.* | | | file://*)

uiChat.py
Code:
	def GetLinks(self, string, ret):
		import re
		links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
		if not (hasattr(ret, "clear") and hasattr(ret, "update")):
			return False

		ret.clear()
		map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
		return len(links) > 0
Code:
	def __SendChatPacket(self, text, type):
#		if text[0] == '/':
#			if ENABLE_CHAT_COMMAND or constInfo.CONSOLE_ENABLE:
#				pass
#			else:
#				return

		if net.IsChatInsultIn(text):
			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_INSULT_STRING)
		else:
			links={}
			if self.GetLinks(text, links):
				for k,v in links.iteritems():
					text = text.replace(k, v)
			net.SendChatPacket(text, type)
interfaceModule.py
Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
			elif "web" == type:
				app.ExecuteShell(tokens[1].replace("w<?", "://"))
PythonApplicationModule.cpp
Code:
#include <Shellapi.h>
///////
PyObject* appExecuteShell(PyObject* poSelf, PyObject* poArgs)
{
	char* szPageLink;
	if (!PyTuple_GetString(poArgs, 0, &szPageLink))
		return Py_BuildException();
	int iExit;
	if (!PyTuple_GetInteger(poArgs, 1, &iExit))
		iExit=0;

	ShellExecute(0, "open", szPageLink, 0, 0, SW_SHOWNORMAL);
	if (iExit)
		PostQuitMessage(0);

	return Py_BuildNone();
}
///////
		{ "ExecuteShell",				appExecuteShell,				METH_VARARGS },
xP3NG3Rx is offline  
Thanks
7 Users
Old   #27
 
elite*gold: 0
Join Date: Jun 2011
Posts: 61
Received Thanks: 4
This gives me syntax error:

Code:
	def GetLinks(self, string, ret):
		import re
		links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
		if not (hasattr(ret, "clear") and hasattr(ret, "update")):
			return False

		ret.clear()
		map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
		return len(links) > 0
This line in red exactly

Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
TABS are ok
Aioriax is offline  
Old   #28
 
elite*gold: 0
Join Date: May 2012
Posts: 17
Received Thanks: 3
Unhappy

Quote:
Originally Posted by xP3NG3Rx View Post
Much sexier!
(ew. need to add an exception into insultcheck for the urls )


Can handle ( | ftp.* | | | file://*)

uiChat.py
Code:
	def GetLinks(self, string, ret):
		import re
		links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I)
		if not (hasattr(ret, "clear") and hasattr(ret, "update")):
			return False

		ret.clear()
		map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
		return len(links) > 0
Code:
	def __SendChatPacket(self, text, type):
#		if text[0] == '/':
#			if ENABLE_CHAT_COMMAND or constInfo.CONSOLE_ENABLE:
#				pass
#			else:
#				return

		if net.IsChatInsultIn(text):
			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_INSULT_STRING)
		else:
			links={}
			if self.GetLinks(text, links):
				for k,v in links.iteritems():
					text = text.replace(k, v)
			net.SendChatPacket(text, type)
interfaceModule.py
Code:
	def MakeHyperlinkTooltip(self, hyperlink):
		tokens = hyperlink.split(":")
		if tokens and len(tokens):
			type = tokens[0]
			if "item" == type:
				self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)
			elif "web" == type:
				app.ExecuteShell(tokens[1].replace("w<?", "://"))
PythonApplicationModule.cpp
Code:
#include <Shellapi.h>
///////
PyObject* appExecuteShell(PyObject* poSelf, PyObject* poArgs)
{
	char* szPageLink;
	if (!PyTuple_GetString(poArgs, 0, &szPageLink))
		return Py_BuildException();
	int iExit;
	if (!PyTuple_GetInteger(poArgs, 1, &iExit))
		iExit=0;

	ShellExecute(0, "open", szPageLink, 0, 0, SW_SHOWNORMAL);
	if (iExit)
		PostQuitMessage(0);

	return Py_BuildNone();
}
///////
		{ "ExecuteShell",				appExecuteShell,				METH_VARARGS },
The map don't work for me
Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
Code:
networkModule.py(line:208) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:30) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1186)

1213 23:39:13195 :: ============================================================================================================
1213 23:39:13195 :: Abort!!!!
Martasovi2 is offline  
Old   #29
 
elite*gold: 73
Join Date: Sep 2011
Posts: 5,257
Received Thanks: 3,820
Quote:
Originally Posted by Martasovi2 View Post
The map don't work for me
Code:
map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links)
Code:
networkModule.py(line:208) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:30) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1186)

1213 23:39:13195 :: ============================================================================================================
1213 23:39:13195 :: Abort!!!!
map() comes with Python 2.7
DasSchwarzeT is offline  
Old   #30
 
elite*gold: 50
Join Date: May 2011
Posts: 265
Received Thanks: 979
Nope the map is available in python2.2 too, maybe the problem is the pure one-line if statement, that is not compatible w/ it. Anyway it's syntax error and not attribute or nameerror so, show a picture with whitespaces. Here it is my mine with a little modification about allowing pages but that one is commented out 'coz I'm not using it.



xP3NG3Rx is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
[PYTHON] Minimal twitch chat client
Just a very minimalistic twitch irc client in python (great to gather statistics about the chat)...
0 Replies - Coding Snippets
[Python] Chat oder Zustand auslesen?
Hey... ich bin gerade einwenig mit Python und Metin2 am ausprobieren. Nun bin ich an einem Punkt angekommen, wo ich nicht weiterkommen :( ...
6 Replies - Metin2 PServer - Discussions / Questions
AVM FritzBox - Passwort durch WEBLINK rausfinden
Hallo Ich habe mein Passwort für meine FritzBox 3131 vergessen, nun wollte ich fragen ob man es durch einen weblink (fritz.box/...../)...
4 Replies - Technical Support
Python - Chat Help
Hey leute und zwar sofort zur frage ich habe einen clienten mit einem Chat Bug...Der anderen erhält die nachricht nicht also der net.SendChatPacket...
0 Replies - Metin2 PServer - Discussions / Questions
Spoiler nicht anklickbar! - Grafik einfügen etc. nicht anklickbar!
Hallo! Ich kann leider keine Spoiler mehr anklicken,oder kann auch während ich schreibe das "dicke B" , "Schräge I , "Unterstrichene U" etc. nicht...
3 Replies - Main



All times are GMT +2. The time now is 17:33.


Powered by vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2018 elitepvpers All Rights Reserved.