@@ -152,26 +152,33 @@ def mw_search(server, query, num):
152152def say_snippet (bot , trigger , server , query , show_url = True ):
153153 page_name = query .replace ('_' , ' ' )
154154 query = quote (query .replace (' ' , '_' ))
155+ url = 'https://{}/wiki/{}' .format (server , query )
156+
157+ # If the trigger looks like another instance of this plugin, assume it is
158+ if trigger .startswith (PLUGIN_OUTPUT_PREFIX ) and trigger .endswith (' | ' + url ):
159+ return
160+
155161 try :
156162 snippet = mw_snippet (server , query )
157163 except KeyError :
158164 if show_url :
159165 bot .reply ("Error fetching snippet for \" {}\" ." .format (page_name ))
160166 return
161- msg = '{} | "{}"' . format ( page_name , snippet )
162- msg_url = msg + ' | https://{}/wiki/{} ' .format (server , query )
163- if msg_url == trigger : # prevents triggering on another instance of Sopel
164- return
167+
168+ msg = '{} | "{} ' .format (page_name , snippet )
169+
170+ trailing = '"'
165171 if show_url :
166- msg = msg_url
167- bot .say (msg )
172+ trailing += ' | ' + url
173+
174+ bot .say (msg , trailing = ' […]' + trailing )
168175
169176
170177def mw_snippet (server , query ):
171178 """Retrieves a snippet of the given page from the given MediaWiki server."""
172179 snippet_url = ('https://' + server + '/w/api.php?format=json'
173180 '&action=query&prop=extracts&exintro&explaintext'
174- '&exchars=300 &redirects&titles=' )
181+ '&exchars=500 &redirects&titles=' )
175182 snippet_url += query
176183 snippet = get (snippet_url ).json ()
177184 snippet = snippet ['query' ]['pages' ]
@@ -193,7 +200,7 @@ def say_section(bot, trigger, server, query, section):
193200 return
194201
195202 msg = '{} - {} | "{}"' .format (page_name , section .replace ('_' , ' ' ), snippet )
196- bot .say (msg )
203+ bot .say (msg , trailing = ' […]"' )
197204
198205
199206def mw_section (server , query , section ):
@@ -225,15 +232,7 @@ def mw_section(server, query, section):
225232 parser = WikiParser (section .replace ('_' , ' ' ))
226233 parser .feed (data ['parse' ]['text' ]['*' ])
227234 text = parser .get_result ()
228- text = ' ' .join (text .split ()) # collapse multiple whitespace chars
229-
230- trimmed = False
231-
232- while len (text ) > (420 - len (query ) - len (section ) - 18 ):
233- text = text .rsplit (None , 1 )[0 ]
234- trimmed = True
235- if trimmed :
236- text += '...'
235+ text = ' ' .join (text .split ()) # collapse multiple whitespace chars
237236
238237 return text
239238
0 commit comments